牛客练习赛90
寒冬信使
分析:
-
从后往前消去 1 1 1 ,记操作次数
-
次数为奇数时,先手胜
次数为偶数时,后手胜
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31#include <bits/stdc++.h> using namespace std; const int N=1e5+5; long long a[N]; char s[N]; int len,tot; void dfs() { while(s[len]=='0' && len>=1) len--; if(len>=1) { s[len]^=1; s[len-1]^=1; tot++; } } signed main() { int n; cin>>n; while(n--) { tot=0; cin>>s+1; len=strlen(s+1); while(len) dfs(); if(tot&1) cout<<"T"<<endl; else cout<<"X"<<endl; } return 0; }
盾与战锤
分析:
-
假设取 m m m 个元素时,造成的伤害最大,可以发现 m m m 个元素为最大的 m m m 个
-
然后再暴力遍历即可
-
注意边界处理的小技巧
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30#include <bits/stdc++.h> #define int long long using namespace std; const int N=2*1e6+5; int a[N],sum[N]; int n; signed main() { int s; cin>>n>>s; for(int i=1;i<=n;i++) scanf("%lld",&a[i]); sort(a+1,a+1+n); for(int i=n;i>=1;i--) { sum[n-i+1]=sum[n-i]+a[i]; } for(int i=n+1;i<=2*n;i++) sum[i]=sum[i-1]; for(int i=1;i<=n;i++) { int ans=0; for(int j=i;j<n+i;j+=i) { int d=sum[j]-sum[j-i]-s; if(d>0) ans+=d; else break; } cout<<ans<<endl; } }
最后
以上就是辛勤花生最近收集整理的关于牛客练习赛90牛客练习赛90的全部内容,更多相关牛客练习赛90牛客练习赛90内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复