码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #289 Div 2

时间:2015-02-01 12:03:20      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:

A. Maximum in Table

题意:给定一个表格,它的第一行全为1,第一列全为1,另外的数满足a[i][j]=a[i-1][j]+a[i][j-1],求这个表格中的最大的数

a[n][n]即为最大的数

#include<iostream>  
#include<cstdio>  
#include<cstring>  
#include<algorithm>  
using namespace std;
int a[12][12],n;
int main()
{
	int i,j,max;
	scanf("%d",&n);
	memset(a,0,sizeof(a));
	for(j=1;j<=n;j++)
	a[1][j]=1;
		for(i=1;i<=n;i++)
	a[i][1]=1;
	
	for(i=2;i<=n;i++)
	for(j=2;j<=n;j++)
	{
			a[i][j]=a[i-1][j]+a[i][j-1];
	}
	printf("%d\n",a[n][n]);	
}

  

B. Painting Pebbles

题意:给定n堆卵石,以及k种颜色,现在给它们上色,要求任意两堆石头的颜色为c的石头个数相差小于等于1

首先将这n堆石头排序,如果k<max-min,那么肯定不能满足 如果k>max-min,那么一定是每一堆石头重复的颜色越少,越能够满足这个条件,所以对每一堆石头,就从第一种颜色开始涂色,依次涂上1 2 3 ---如果石头的个数超过了颜色的种类,则当前涂到第j个石头,用j对k取余,即为该石头的颜色。

#include<iostream>  
#include<cstdio>  
#include<cstring>  
#include<algorithm>  
using namespace std;
int b[305][305];
struct node
{
	int num;
	int order;
} a[305];
bool cmp(node n1,node n2)
{
	return n1.num<n2.num;
}
bool cmp0(node n1,node n2)
{
	return n1.order<n2.order;
}
int main()
{
	int n,k,i,j,ans;
	scanf("%d %d",&n,&k);
	memset(b,0,sizeof(b));
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i].num);
		a[i].order=i;
	}
	sort(a+1,a+1+n,cmp);
	
	if(k<a[n].num-a[1].num)
	printf("NO\n");
	else
	{
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=a[i].num;j++)
			{
				b[a[i].order][j]=j%k;
				if(j%k==0)
				b[a[i].order][j]=k;
			}
		}
		printf("YES\n");
		sort(a+1,a+n+1,cmp0);
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=a[i].num;j++)
			printf("%d ",b[a[i].order][j]);
			printf("\n");
			
		}	
	}
	
	
	
}

  

 

Codeforces Round #289 Div 2

标签:

原文地址:http://www.cnblogs.com/wuyuewoniu/p/4265269.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!