目录
1.判断总分是否正确
由“在第 i 轮获胜会获得 i 分,没有平局。”可知,总分总是数列(1,1+2,1+2+3...)中的一个数
可以写出如下核心代码:
long long a,b;//int数字上限为2³¹-1,本题数据上限为2³²-1,故应用long long
cin>>a>>b;
long long sum=a+b;
int x=1;
while (sum-x>=0){
sum-=x;
x++;
}x--;
if(sum==0){cout<<x;
if(a)cout<<' ';//如果a不为0则输出空格
}
else {
cout<<"No";
return 0;
}//求是否位于等差数列内
2.求lijc赢的次数
接下来判断ljcc赢的局数
核心代码如下:
for(int i=x;i>0;i--){//切记从大到小循环
if(a>=i){
a-=i;
cout<<i;
flag=1;
}
if(!a)break;//如果剩余分数为0跳出循环
else if(flag) cout<<' ';//非行末则输出空格
flag=0;
}
3.注意事项&完整代码
注意:1.此题必须开long long!!!
2.要从大到小循环,不能从小到大循环!!!
#include<iostream>
using namespace std;
int main{
long long a,b;//int数字上限为2³¹-1,本题数据上限为2³²-1,故应用long long
cin>>a>>b;
long long sum=a+b;
int x=1;
while (sum-x>=0){
sum-=x;
x++;
}x--;
if(sum==0){cout<<x;
if(a)cout<<' ';//如果a不为0则输出空格
}
else {
cout<<"No";
return 0;
}
//求是否位于等差数列内
for(int i=x;i>0;i--){//切记从大到小循环
if(a>=i){
a-=i;
cout<<i;
flag=1;
}
if(!a)break;//如果剩余分数为0跳出循环
else if(flag) cout<<' ';//非行末则输出空格
flag=0;
}
return 0;
}
本蒟蒻又水了一篇题解qwq
都看到这里了,还不点关注吗