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

 

posted @ 2016-10-03 23:17  遗风忘语  阅读(127)  评论(0编辑  收藏  举报