CF #624 div2
Posted hhyx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF #624 div2相关的知识,希望对你有一定的参考价值。
# A
题意:
两个序列a,b表示一个比赛,分别输入a,b,输入是1 代表这个回合得分,每个位置上的a,b是对应的回合,
二者在某一个回合可能都得分,求能够使a的总和大于b的总和中a的分最大值的可能的最小值
题解:
分别统计a的个数和b的个数以及二者共同的个数分情况求解
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N=1e5+10; 4 int n; 5 bool a[N],b[N]; 6 int main(){ 7 cin>>n; 8 int ans=1; 9 int suma=0,sumb=0,same=0; 10 for(int i=1;i<=n;i++){ 11 int x; 12 cin>>x; 13 a[i]=x; 14 if(x) 15 suma++; 16 } 17 for(int i=1;i<=n;i++){ 18 int x; 19 cin>>x; 20 b[i]=x; 21 if(x && a[i]) same++; 22 if(x) sumb++; 23 } 24 25 if(suma == same && sumb >= same) { 26 ans=-1; 27 } 28 else if(suma>sumb) { 29 ans=1; 30 } 31 else if(suma <= sumb) { 32 int now=suma-same; 33 int need=sumb-same-now; 34 35 ans+=need/now; 36 ans+=1; 37 38 } 39 cout<<ans<<endl; 40 }
# B
题意:
题解:
# C
题意:
长度小于100的字符串,对于i位置可以删去的条件是 i-1或者 i+1 位置是它的上一个字母(比如a对于b,d对于e)
删去元素后前后两段合并,意味着i-1跟i+1相邻了问最多能删去多少个元素
题解:
从字母z到b开始模拟,保证了每个字母后面没有大的可以删,满足最优
每个字母如果进行了删除操作,需要再遍历一次这个字母,因为删除以后相邻的可能会满足条件。
#include<bits/stdc++.h> #define N 110 using namespace std; bool vis[N]; int main(){ int n; string s; cin >> n >> s; int ans = 0; for(int i = 25; i > 0; --i){ char now = ‘a‘ + i; int lastans = ans; for(int j = 0; j < n; ++j){ int pre = j - 1, nex = j + 1; while(pre >= 0 && vis[pre]){ pre--; } while(nex < n && vis[nex]){ nex++; } if(!vis[j] && s[j] == now && ((pre < 0 ? 0 : s[j] - s[pre] == 1) || (nex == n ? 0 : s[j] - s[nex] == 1))){ ans++; vis[j] = true; } } if(ans > lastans){ i++; } } cout << ans << endl; return 0; }
# D
题意:
题解:
以上是关于CF #624 div2的主要内容,如果未能解决你的问题,请参考以下文章