文章目錄
- 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;
}