A. Digit Game
解析: 很简单的一道题,只要这串数字中的奇数位出现了一次奇数,并且数字位数是奇数,那么最后一步就可以是Raze将这个奇数一直留到最后一步,如果这个数的位数是偶数,那么只要偶数位出现了一次偶数,Raze一定是必输状态,Breach可以把这个位置的偶数留到最后。详细逻辑见代码
#include<cstdio> #include<cstdlib> #include<iostream> typedef long long ll; using namespace std; const int MAX_N = 2e5 + 10; char nums[MAX_N]; int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); scanf("%s",nums+1); int odd = 0,even = 0; for(int i = 1;i<=n;i++) { int num = nums[i] - '0'; if(i & 1) { if(num % 2 == 1) odd = 1; } else { if(num % 2 == 0) even = 1; } } if(n % 2 == 0) { if(even) puts("2"); else puts("1"); } else { if(odd) puts("1"); else puts("2"); } } return 0; }B. Stairs
#include<bits/stdc++.h> #define ll long long #define llINF 9223372036854775807 #define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); using namespace std; ll num[70]; int32_t main() { IOS; int t; cin>>t; while(t--) { ll x; cin>>x; ll ans=0,cas=1; while(x>0) { x-=(1+cas)*cas/2; if(x>=0) ans++; cas=cas*2+1; } cout<<ans<<endl; } }C. Killjoy 如果
#include<bits/stdc++.h> using namespace std; int main() { int T;cin>>T; while(T--){ int n,x,y,sum=0,f=1,c=0; cin>>n>>x; for(int i=1;i<=n;i++){ cin>>y;sum+=y-x;if(y!=x) f=0;if(y==x) c=1; } if(f) cout<<0<<endl; else if(!sum||c) cout<<1<<endl; else cout<<2<<endl; } return 0; }D1
只要保证a[i] 两边都为大数即可,然后我们可以先进行排序,其次交换位置,就可保证两边都是大数
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 10; ll a[N], b[N], c[N]; int main() { int n; cin >> n; for(int i = 0; i < n; i ++ ) cin >> a[i]; int t = (n - 1) / 2; printf("%d\n", t); sort(a, a + n); for(int i = 0; i < n - 1; i += 2) { swap(a[i], a[i + 1]); } for(int i = 0; i < n; i ++ ) printf("%d ", a[i]); puts(""); return 0; }D2. Sage’s Birthday (hard version)
#include <bits/stdc++.h> #define ll long long using namespace std; int main() { int n; cin>>n; ll a[n]; for(int i=0;i<n;i++) cin>>a[i]; vector<ll> v(n); sort(a,a+n); int j=0; for(int i=1;i<n;i+=2) v[i]=a[j++]; for(int i=0;i<n;i+=2) v[i]=a[j++]; int c=0; for(int i=1;i<n-1;i++) if(v[i]<v[i-1] and v[i]<v[i+1]) c++; cout<<c<<"\n"; for(int i=0;i<n;i++) cout<<v[i]<<" "; return 0; }