文章目录
- A.Paper Watering
- B.nIM gAME
- E.Checksum
A.Paper Watering
思路:题目说有平方和开方两种操作,如果这个数是平方数,那么它开方之后就只能开方,如果平方的话就重复了,反之就有开方和平方两种操作。
代码如下
//A
#include<iostream>
#include<algorithm>
#include<cmath>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int n,sum=0,k;
signed main()
{cin>>n>>k;if(k==0||n==1){cout<<1<<endl;return 0;}sum+=k;while(k--){int t=sqrt(n);if(t==1){sum++;break;}sum++;if(t*t!=n){sum+=k;}n=t;}cout<<sum+1<<endl;return 0;
}
B.nIM gAME
思路:这个题是个博弈题,我们可以发现想让brz赢就要让他取石子,1,2,3
都是偶数,因为这个题要求异域和,但是两人都足够聪明所以brz不可能赢
代码如下
//D
#include<iostream>
#include<algorithm>
#include<cmath>
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int n,t;
signed main()
{cin>>t;while(t--){cin>>n;cout<<"lose"<<endl;}return 0;
}
E.Checksum
思路:因为k的范围就20所以就可以暴力枚举k有几个1,然后把A中1的个数加入,再转成二进制,看d与b是否相等
代码如下
#include <bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
using namespace std;
const int N = 1e5+5;
int a[N],b[N];
void solve ()
{string ans="99999999999999";//定义一个很大的string,用于判断int n,k;cin>>n>>k;string s;cin>>s;int cnt=0;for (int i=0;i<s.size();i++) {if (s[i]=='1') cnt++;}for (int i=0;i<=k;i++){string t;int now=cnt+i;int sss=0;while (now&&sss<k)//转化成二进制{t+=(now%2)+'0';sss++;now>>=1;}for (int i=t.size();i<k;i++)t+="0";//如果长度不够就补0reverse(t.begin(),t.end());//反转过来int pos=count(t.begin(),t.end(),'1');if (pos==i){ans=min(ans,t);}}if (ans=="99999999999999") cout<<"None"<<'\n';else cout<<ans<<'\n';
}signed main ()
{IOS;int T =1;cin>>T;while(T--) solve ();return 0;
}