第三次积分赛部分题解
文章目录
前言
后续会不断补充D
链接:https://ac.nowcoder.com/acm/contest/11746/D
可以看成n-1个牌拿到最后一张牌就赢,这样就转化为巴士博弈问题了
#include<bits/stdc++.h>
using namespace std;
int T,n,k;
int main()
{
cin>>T;
while(T--)
{
cin>>n>>k;
if((n-1)%(k+1)==0)//经典巴士博弈解法
cout<<"ma la se mi no.1!"<<endl;
else
cout<<"yo xi no forever!"<<endl;
}
return 0;
}
I
链接:https://ac.nowcoder.com/acm/contest/11746/I
签到题,但当时因为感觉含有两个未知数没去深入思考,其实如果SUM=A*X,A是第一天买花数的整倍数,X是第一天买花数,直接相除取余就行了,往求商上死钻的都是大傻瓜 (比如说当时的我呜呜呜)
不解释直接上代码
#include<bits/stdc++.h>
using namespace std;
int main ()
{
int T;
cin>>T;
while(T--){
int n,flag=1;//打个标记
cin>>n;
for(int i=2;i<=15;i++){
long long sum=pow(2,i)-1;
if(n%sum==0){//刚开始不会取余为0,为0的次数只有一次,所以可以for循环一点点遍历
printf("YE5\n");flag=0;break;//跳出循环
}
}
if(flag==1)printf("N0\n");
}
}