首页 > 代码库 > Codeforces Round #375 (Div. 2)

Codeforces Round #375 (Div. 2)

题目链接:

A:The New Year: Meeting Friends

B:Text Document Analysis

C:Polycarp at the Radio

分析:这场第一题送分,第二题模拟,第三题构造+特殊处理。做出几道说几道,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 }
View Code

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 }
View Code

 

Codeforces Round #375 (Div. 2)