A. Maximum in Table
水题,签到题目。
附代码:
#include <bits/stdc++.h>
using namespace std;
int matric[12][12];
int main()
{
int N;
cin>>N;
memset(matric,0,sizeof(matric));
for( int i = 0; i < N; i++ )
{
for( int j = 0; j < N; j++ )
{
if( j == 0 || i == 0)
matric[i][j]=1;
else
matric[i][j]=matric[i-1][j]+matric[i][j-1];
}
}
printf("%d\n",matric[N-1][N-1]);
return 0;
}
B. Painting Pebbles
题意:有n堆鹅卵石,现在要求用k种颜色给每块石头上色,保证任意两堆石头中任意颜色的石头个数相差不能大于1.即: |bi, c - bj, c| ≤ 1
题解:题目一定有多组解。刚开始的时候以为只要把最小数量找出来,每堆在最小数量1的基础上加别的颜色,每个颜色都只加1,直到满足鹅卵石总数,当max-min>=k不满足条件。但是比如
2 2
2 4
按照最初的思路这样是无解的。但是其实我们可以这样分配。
1 2
1 2 1 2
所以,对于每堆鹅卵石我们应该采用对k取余的方式分配颜色的数量,当max-min>k不满足条件。
附代码:
#include <bits/stdc++.h>
#include <cstdio>
#include <cstdlib>
#define MAX_N 110
using namespace std;
int N,K;
int num[MAX_N];
int main()
{
cin>>N>>K;
int x=INT_MIN,y=INT_MAX;
for( int i = 0; i < N; i++ )
{
scanf("%d",&num[i]);
x=max(x,num[i]);
y=min(y,num[i]);
}
if( x-y > K)
printf("NO\n");
else
{
printf("YES\n");
for( int i = 0; i < N; i++ )
{
int out=1;
for( int j = 0; j < num[i]; j++ )
{
printf("%d",j%K+1);
if( j != num[i]-1 )
printf(" ");
else
printf("\n");
}
}
}
return 0;
}
这次比赛只做出来两道题,但是因为基础分太低,却还升了一点。第二题不算自己的成果,关键点参考了学长的思路,还需要继续努力!C题还要在琢磨一下,其实应该是能AC的。To do list,on my way!