Bootstrap

Codeforces Round 957 (Div. 3)A——E

Codeforces Round 957 (Div. 3)

A.Only Pluses

题意:给定三个数,每次可以选定一个数加一,最多操作五次,求乘积的最大值。
题解:每次选最小的数加一。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	priority_queue<int, vector<int>, greater<int> > q;
	int t;
	cin>>t;
	while(t--)
	{
		int a,b,c;
		cin>>a>>b>>c;
		q.push(a);
		q.push(b);
		q.push(c);
		for(int i=1;i<=5;i++)
		{
			int num = 0;
			num=q.top();
			q.pop();
			num+=1;
			q.push(num);
		}
		long long ans=1;
		while(!q.empty())
		{
			ans*=q.top();
			q.pop();
		}
		cout<<ans<<endl; 
	}
	return 0;
} 

B. Angry Monk

题意:每次选一个碎片 ai,分解为 1 和 a i-1或者选一个碎片和1相加,问最后需要经过多少次操作才可以把所有碎片合成一个。
题解:从小到大排序,选最小的x,经过x-1次分解为x个1,在经过x次把所有1加到最大的碎片上去。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		long long n,k;
		priority_queue<int, vector<int>, greater<int> > q;
		cin>>n>>k;
		int num=0;
		long long ans=0;
		for(int i=1;i<=k;i++)
		{
			cin>>num;
			q.push(num);
		}
		while(q.size()!=1)
		{
			int a=q.top();
			ans=ans+a+a-1;
			q.pop();
		}
		cout<<ans<<endl;
	}
	return 0;
}

C. Gorilla and Permutation

题意:给你一个n,m,k,然后f(i)是前i个数里面不小于k的值的和,因此前面就从大到小倒着来就可以,然后当轮到倒数第m个后,要从前往后来,确保前面的数更小,累加值更大。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int a,b,c;
		cin>>a>>b>>c;
		for(int i=a;i>b;i--)
        {
            cout<<i<<" ";
        }
        for(int i=1;i<=b;i++)
        {
            cout<<i<<" ";
        }
        cout<<endl;
	}
	return 0;
}

D、E之后更新。

;