T1神秘金币

正确思路

因为拾取每一个金币只需要一个时刻,而每一个金币的消失时间都是不一样的.那么我们理论上可以拿到所有金币。所以价值和最大是前k大的金币和

正确代码

    #include<bits/stdc++.h>
    using namespace std;
    long long n,a[100010],tim[100010],sum,k;
    int main()
    {
        freopen("coin.in","r",stdin);
        freopen("coin.out","w",stdout);
        cin>>n>>k;
        for(int i=1;i<=n;i++) cin>>tim[i];
        for(int i=1;i<=n;i++) cin>>a[i];
        sort(a+1,a+n+1);
        for(int i=n;i>n-k;i--)
        {
            sum+=a[i];
        }
        cout<<sum;
        return 0;
    } 

T2学习乘法

正确思路

可以用暴搜,枚举出所有可能性,在找到最大值

时间复杂度O(26)O(2^6)

正确代码

    #include<bits/stdc++.h>
    using namespace std;
    long long as[20],bs[20],idx1,idx2,a1,b1,maxx;
    void dfs(int u)
    {
        if(u==0)
        {
            a1=0;
            b1=0;
            for(int i=idx1;i>=1;i--) a1=a1*10+as[i];
            for(int i=idx2;i>=1;i--) b1=b1*10+bs[i];
            maxx=max(maxx,a1*b1);
            return;
        }
        for(int i=0;i<2;i++)
        {
            if(i==1) 
            {
                swap(as[u],bs[u]);    
                dfs(u-1);
                swap(as[u],bs[u]);
            }
            else
            {
                dfs(u-1);
            }
        }
        return;
    }
    int main()
    {
        freopen("mul.in","r",stdin);
        freopen("mul.out","w",stdout);
        int a,b;
        cin>>a>>b;
        while(a)
        {
            as[++idx1]=a%10;
            a/=10;
        }
        while(b)
        {
            bs[++idx2]=b%10;
            b/=10;
        }
        dfs(idx1);
        cout<<maxx;
        return 0;
    }

T3饮料难题

思路

k个空瓶=1个饮料+1个空瓶

k-1个空瓶=1个饮料

结果就是 n/(k1)n/(k-1)

需要高精度

正确代码

    #include<bits/stdc++.h>
    using namespace std;
    string a;
    vector<int> sum,A;
    long long k;
    vector<int> div(vector<int> d,int b)
    {
    	vector<int> C;
    	int t=0;
    	int r=0;
    	for(int i=d.size()-1;i>=0;i--)
    	{
    		t=r*10+d[i];
    		r=t%b;
    		C.push_back(t/b);
    	}
    	reverse(C.begin(),C.end());
    	while(C.back()==0&&C.size()>1) C.pop_back();
    	reverse(C.begin(),C.end());
    	return C;
    }
    int main()
    {
    	freopen("drink.in","r",stdin);
    	freopen("drink.out","w",stdout);
    	cin>>a>>k;
    	for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    	sum=div(A,k-1);
    	for(int i=0;i<sum.size();i++) cout<<sum[i];
    	return 0;
    }

T4手术

暂无(set写不了一点)