GMPCP 粤澳热身赛

重要提醒:
1、每道题都要看清题目是否测试多组数据,若是,则要加while(~scanf("%d",&cnt))类似的代码
2、输出结果的最后一定要加换行符(’\n’)
3、一定要仔细仔细再仔细!!!

官方题解:2020年粤澳热身赛转型题解

个人题解

A题:莫斯方块

提升题,不会

B题:互评成绩计算

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int cnt,tmp;
	while(~scanf("%d %d",&cnt,&tmp)) //测试多组数据
	{
		for(int j=0;j<cnt;j++)
		{
			int tea,a,mi=101,mn=-1,k=0,sum=0;
			cin>>tea;
			for(int i=1;i<cnt;i++)
			{
				cin>>a;
				if(a<=tmp&&a>=0)
				{
					mi=min(a,mi);
					mn=max(a,mn);
					sum+=a;
					k++;
				}
			}
			printf("%d\n",(int)(((sum-mi-mn)*1.0/(k-2) + tea)/2.0+0.5)); //包含四舍五入的小技巧
		}
	}
	return 0;
}

C题:活动总台

变态题,不会

D题:发现字符串中出现次数最多的字母

AC代码:

#include<bits/stdc++.h>
using namespace std;
int num[27]={0};
int main()
{
	string s;
	cin>>s;
	int len=s.length();
	int i=0;
	for(int i=0;i<len;i++)
	{
		num[s[i]-'a'+1]++;
	}
	int maxn=0;
	char big;
	for(int i=1;i<=len;i++)
	{
		if(num[i]>maxn)
		{
			big=i+'a'-1;
			maxn=num[i];
		}
	}
	for(int i=0;i<len;i++)
	{
		cout<<s[i];
		if(s[i]==big)
			cout<<"(出现了"<<maxn<<"次)";
		if(i==len-1)
			cout<<endl; //记得加换行符
	}
	return 0;
}

E题:度假酒店

AC代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;

int main(){
    ll n,m,total,num[3];
    while(~scanf("%lld %lld %lld",&num[0],&num[1],&num[2]))
	{
        sort(num,num + 3);
        ll min = num[2] - 1;
        ll ans = 0;
        if(min - num[1] > 0)
            ans += min - num[1];
        if(min - num[0] > 0)
            ans += min - num[0];
        printf("%lld\n",ans);
    }
}

是真的想不明白,我最怕这种找规律题了,突破口可能是在 样例 2、3 中,1-1=01000000000000000000-1=999999999999999999

F题:三人成百

AC代码:

#include <bits/stdc++.h>
using namespace std;
vector<int> tmp;
int main()
{
	int a;
	while(cin>>a)
	{
		if(a==0)
			break;
		tmp.push_back(a);
	}
	int flag=0;
	sort(tmp.begin(),tmp.end());
	for(int i=0;i<tmp.size()-2;i++)
	{
		if((tmp[i]!=tmp[i-1]&&i>0)||i==0)
		{
			for(int j=i+1;j<tmp.size()-1;j++)
			{
				if((tmp[j]!=tmp[j-1]&&j>i+1)||j==i+1)
				{
					for(int k=j+1;k<tmp.size();k++)
					{
						if((tmp[k]!=tmp[k-1]&&k>j+1)||k==j+1)
						{
							if(tmp[i]+tmp[j]+tmp[k]==100)
							{
								cout<<tmp[i]<<' '<<tmp[j]<<' '<<tmp[k]<<' '<<endl;
								flag=1;
							}
						}
					}
				}
			}
		}
	}
	
	if(flag==0) cout<<"NO"<<endl; //不存在输出 NO
	return 0;
}

WeJudge 题库

莫斯方块(题号2472)、活动总台(题号2480)、度假酒店(题号1492)在 《北师珠ACM题库》 中
互动成绩计算(题号2258)、找出字符串中出现次数最多的字母(题号3916)、三人成百(题号3972)在 《GMCPC练习题》 中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章