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 }
一直地一直地往前走