Codeforces Round #721 (Div. 2)
Posted ccsu_madoka
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #721 (Div. 2)相关的知识,希望对你有一定的参考价值。
Codeforces Round #721 (Div. 2)
C. Sequence Pair Weight
题意:给一个数组,求他的所有连续子串中,任取相等的两数的方案之和。
题解:这个题其实,造个全是1的数组乱搞算出来就差不多了。
当计算i的贡献时,我们计算前面所有a[i]的贡献,同时对于每一个包含i的后缀都可以算一次i前面的贡献,所以ans加上map[a[i]]*(n-i+1);
当a[i]在第i个位置时,可为后面的数贡献i个子串,所以每次算完贡献后我们在map[a[i]]中加i
#include<iostream>
#include<map>
using namespace std;
#define ll long long
const ll N=1e5+7;
ll t,n,a[N];
map<ll,ll>ma;
int main(){
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
ma.clear();
long long ans=0;
for(int i=1;i<=n;i++){
ll res=ma[a[i]];
ans+=res*(n-i+1);
ma[a[i]]+=i;
}
printf("%lld\\n",ans);
}
}
B2. Palindrome Game (hard version)
题意:B1的升级版,给一个01字符串,每次可以两种操作
1,将一个0变成1,花费1;
2,将字符串反转,花费0(要求字符串非回文,且上次操作未反转)
A与B轮流操作,A先手,全1结束,博弈看谁最后花钱最少。
题解:
分情况讨论清楚即可,由简易版我们知道,我们可以与对面下对称位,在最后还有两个0时反转,这样对方就会多花2费。
难版增加了字符串不一定回文的条件,那么其实我只要一开始反转,对方就只能一直填1直到回文,所以对方一定想尽快使字符串回文,那么对方的走法也基本上被我控制了。
对于未回文时,我们一直反转等待最后一步造成回文得到翻转控制权,便就和第一题解法一样了。
同时谈论一下,中间点的值,与0数等于1时,等于2时的特殊样例即可。
#include<iostream>
using namespace std;
const int N=1e3+7;
int t,n;
char s[N];
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
scanf("%s",s+1);
int cnt=0;
int sum=0;
for(int i=1;i<=n;i++){
if(s[i]==\'0\')cnt++;
if(s[i]!=s[n-i+1])sum++;
}
sum/=2;
if(sum==0){
if(cnt==1){
printf("BOB\\n");
}
else if(cnt%2==0){
printf("BOB\\n");
}
else{
printf("ALICE\\n");
}
}
else{
if(cnt==1){
printf("ALICE\\n");
}
else{
if((cnt-sum)%2==0){
printf("ALICE\\n");
}
else{
if(cnt==2){
printf("DRAW\\n");
}
else{
printf("ALICE\\n");
}
}
}
}
}
}
以上是关于Codeforces Round #721 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #721 (Div. 2) Codeforces-1527
Codeforces Round #721 (Div. 2)
C. Sequence Pair Weight——Codeforces Round #721 (Div. 2)
Codeforces Round #721 (Div. 2) C. Sequence Pair Weight(计算贡献/STL)