一月最后一场,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博客,格式可能有所偏差。 **