语法周赛 Round 2 题解
凑数
难度:学过输入输出就可以拿到满分。
满分做法:题目要求我们输出三个非负整数
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
cin>>n;
cout<<1<<' '<<1<<' '<<n-2<<endl;
return 0;
}
开三方
难度:掌握单层循环语句,并且了解次方的数学含义。就可以拿到满分。 满分做法:根据题意
注:本题数据范围较大,要把变量定义成 long long
类型!!!
#include<bits/stdc++.h>
using namespace std;
long long n,r;
int main(){
cin>>n;
while(r*r*r<=n){
r++;
}
cout<<r-1<<' '<<r;
return 0;
}
比大小
难度:需要熟练掌握分支、字符串以及字典序才可以拿到满分。
30 分做法:对于 int
的范围之内,使用整型来存储和比较即可。
满分做法:对于 int
或 long long
进行存储,需要将
(1)两数相等,输出 same
,则对应的字符串也应完全一致,我们可以通过 ==
直接进行判断。
(2)第一个数是负数,第二个数是正数,即 a[0]
是 '-'
,b[0]
不是 '-'
时输出 second
。
(3)第一个数是正数,第二个数是负数,即 a[0]
不是 '-'
,b[0]
是 '-'
时输出 first
。
(4)两个数同正或者同负。
同正,即 a[0]
不是 '-'
且 b[0]
也不是 '-'
。先判断一下两个数的位数(字符串长度)是否相等。如果不等,则位数大的数值本身也一定更大。如果位数相等,则可以比较字典序,字典序大的数值更大。然后根据结果输出对应的语句即可!
同负,即 a[0]
是 '-'
且 b[0]
也是 '-'
。判断原理同上,但结果相反。
#include <bits/stdc++.h>
using namespace std;
string a,b;
int main()
{
cin >> a >> b;
if (a == b)
cout << "same"; // 相等
else if (a[0] == '-' && b[0] != '-')
cout << "second"; // 一负一正
else if (a[0] != '-' && b[0] == '-')
cout << "first"; // 一正一负
else if (a[0] != '-' && b[0] != '-')
{
// 两个正数
if (a.length() < b.length() ||
(a.length() == b.length() && a < b))
cout << "second";
else
cout << "first";
}
else
{
// 两个负数
if (a.length() < b.length() ||
(a.length() == b.length() && a < b))
cout << "first";
else
cout << "second";
}
return 0;
}
吃桃子
难度:需要熟练掌握结构体、 sort
排序和贪心思想。
满分做法:为了吃到最多的桃子,我们的策略是优先吃最开胃的桃子,因为这样能吃到尽可能多的桃子,必然开心程度也就高。而如果有相同开胃值的桃子,我们要优先吃其中开心值最高的桃子。
具体实现为,首先定义一个结构体,其中包括桃子的开胃值和开心值。因为我们要先按开胃值从大到小排序,开胃值相等时再按开心值从大到小排序。那么我们可以用 sort
排序,通过自定义 cmp
函数来处理这种二级排序的问题。在排序之后,我们就可以从头到尾模拟吃桃的过程,最后算出最大的开心程度即可得到答案。
#include<bits/stdc++.h>
using namespace std;
struct st{ //把桃子定义成结构体类型
int a,b;
};
st p[100000]; //定义一个结构体数组存储各个桃子的信息
bool cmp(st A,st B){ // 自定义cmp函数,进行二级排序
if(A.b==B.b){
return A.a>B.a;
}
return A.b>B.b;
}
int n,sum=1,i=0,ans=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i].a>>p[i].b;
}
sort(p+1,p+1+n,cmp); //调用sort
while(sum!=0||i==n){ //模拟吃桃子的过程计算最大开心程度
i++;
ans+=p[i].a;
sum--;
sum+=p[i].b;
}
cout<<ans;
return 0;
}