Codeforces Round #375 (Div. 2)
Posted chendl111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #375 (Div. 2)相关的知识,希望对你有一定的参考价值。
题目链接:
A:The New Year: Meeting Friends
分析:这场第一题送分,第二题模拟,第三题构造+特殊处理。做出几道说几道,QAQ
A.
求出最大值与最小值之差即可
B.
多种情况判断一下,分为
\'_\':判断前一个是否为单词,是且在括号内则cnt++,不在括号内则比较最大值
\'(\':flag++,判断前一个是否为单词,是则同上处理
\')\':flag--,同样判是否为单词,是则cnt++
若为单词且不在括号内则 len++
详情见代码
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 6 char s[256]; 7 int n,cnt,maxlen,len,i,flag; 8 9 int main() 10 { 11 cin>>n>>s; 12 while(s[i]!=\'\\0\') 13 { 14 switch(s[i++]) 15 { 16 case \'_\':if(!flag) {maxlen=max(maxlen,len),len=0;} 17 else if(i>1&&(s[i-2]>=\'a\'&&s[i-2]<=\'z\'||s[i-2]>=\'A\'&&s[i-2]<=\'Z\')) {cnt++;}break; 18 case \'(\':flag++;maxlen=max(maxlen,len),len=0;break; 19 case \')\':flag--;if(s[i-2]>=\'a\'&&s[i-2]<=\'z\'||s[i-2]>=\'A\'&&s[i-2]<=\'Z\') {cnt++;}break; 20 default:if(!flag) len++; 21 } 22 } 23 maxlen=max(maxlen,len); 24 printf("%d %d\\n",maxlen,cnt); 25 }
C.
对每一个<=m的数记录次数,然后要求的最大的最小值即为n/m
遍历数组b,若b[i]<=m&&a[b[i]]>x||b[i]>m,那么遍历a,找到a[i]<x,然后处理,注意判断的顺序
详情见代码
1 #include<cstdio> 2 #include<algorithm> 3 #include<iostream> 4 using namespace std; 5 6 int n,m,x,a[2020],b[2020],cnt,num; 7 8 int main() 9 { 10 scanf("%d %d",&n,&m); 11 for(int i=1;i<=n;++i) 12 { 13 scanf("%d",b+i); 14 if(b[i]<=m) a[b[i]]++; 15 } 16 x=n/m; 17 for(int i=1;i<=n;++i) if(b[i]>m||b[i]<=m&&a[b[i]]>x) 18 { 19 //printf("b[%d]=%d\\n",i,b[i]); 20 for(int j=1;j<=m;++j) if(a[j]<x) 21 { 22 //printf("a[%d]=%d\\n",j,a[j]); 23 if(b[i]<=m)a[b[i]]--;b[i]=j;a[j]++;cnt++;break; 24 } 25 //for(int i=1;i<=n;++i) printf("%d%c",b[i],i==n?\'\\n\':\' \'); 26 } 27 printf("%d %d\\n",x,cnt); 28 for(int i=1;i<=n;++i) printf("%d%c",b[i],i==n?\'\\n\':\' \'); 29 }
以上是关于Codeforces Round #375 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #375 (Div. 2) A
Codeforces Round #375 (Div. 2)
Codeforces Round #375 (Div. 2) C
Codeforces Round #375 (Div. 2)