Codeforces Round #289 (Div. 2, ACM ICPC Rules)

一月最后一场,ACM-ICPC规则,没有pretest,没有hack,原本感觉会比上次简单点。。结果把自己打成绿名了。。。

一共就出了一道题。结束之后,B题改过了。

509A - Maximum in Table:

简单题,不说了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
const int maxn=11;
int a[maxn][maxn];
int main(){
for(int i=0;i<maxn;++i){
a[i][0]=1;
if(i==0)
for(int j=1;j<maxn;++j)
a[i][j]=1;
else
for(int j=1;j<maxn;++j)
a[i][j]=a[i-1][j]+a[i][j-1];
}
int n;
while(cin>>n)
cout<<a[n-1][n-1]<<endl;
return 0;
}

509B - Painting Pebbles:

n堆鹅卵石,用k种颜色上色,任意两堆之间的任意颜色的鹅卵石数目差要求绝对值小于1。

思路很简单,当鹅卵石数目最大值减最小值大于数目k时,则无法涂色。最少堆的鹅卵石都用1涂色。然后其他堆涂相同数目的1,剩下的递增一个颜色涂一个。

一开始没注意到可以不用到所有颜色,后来删掉k>maxp之后,忘记修改输出,一直到比赛结束没看出来,我也是神了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=110;
int a[maxn];
int main(){
int n,k;
scanf("%d%d",&n,&k);
memset(a,0,sizeof(a));
scanf("%d",&a[0]);
int maxp=a[0],minp=a[0];
for(int i=1;i<n;++i){
scanf("%d",&a[i]);
maxp=max(maxp,a[i]);
minp=min(minp,a[i]);
}
if(maxp-minp>k) printf("NO\n");
else{
printf("YES\n");
for(int i=0;i<n;++i){
bool p=1;
for(int j=0;j<minp;++j){
if(p) p=0;
else printf(" ");
printf("1");
}
for(int j=0;j<a[i]-minp;++j){
if(p) p=0;
else printf(" ");
printf("%d",j+1);
}
printf("\n");
}
}
return 0;
}

** 本文迁移自我的CSDN博客,格式可能有所偏差。 **