hdu 4671(多校联赛7--水模拟)

点击打开链接


题意:

有n和服务器,m个数据库,每个数据库都需要连接服务器,但是每个数据库都有一个连接服务器的优先级别。求每个数据库的服务器优先顺序。并且保证在至多一台服务器坏掉的情况下,其他服务器平衡(i,j分别表示服务器,A[i],A[j]表示对应服务器被连接数据库的数目,平衡就是指任意i和j,都保证|A[i]-A[j]|<=1,就是说当有1台或者两台换掉的话,其他服务器被连接数据库的数目要平均分配)。。。

因为至多有一台坏掉,所以只需要考虑前两位就可以了,


n>m的时候

1 n...

2 n...

3 n...

n=m的时候把最后一行换成n 1....

n<m

我让第一列从1到n循环,第二列从t=n开始,当同一行的第一列和第二列数相同时,让--t;

n=5,m=13

1 5

2 5

3 5

4 5

5 4(5=5,--5)

1 4

2 4

3 4

4 3(--4)

5 3

1 3

2 3

3 2

分析:每次对其进行平均分配。。。

#include"stdio.h"
#include"string.h"
#define N 203
int map[N][N];
int n,m;
int main()
{
	int n,m;
	int i,j;
	while(scanf("%d%d",&n,&m)!=-1)
	{
		if(n>=m)
		{
			j=1;
			for(i=1;i<=m;i++)
			{
				map[i][1]=j++;
				map[i][2]=n;
			}
			if(n==m)map[m][1]=n,map[m][2]=1;
		}
		else 
		{
			int t=1;
			for(i=1;i<=m;i++)
			{
				map[i][1]=t++;
				if(t>n)t=1;
			}
			t=n;
			for(i=1;i<=m;i++)
			{
				if(t==map[i][1])t--;
				if(t<1)t=n;
				map[i][2]=t;
			}
		}
		for(i=1;i<=m;i++)
		{
			printf("%d %d",map[i][1],map[i][2]);
			for(j=1;j<=n;j++)
			{
				if(j==map[i][1]||j==map[i][2])continue;
				printf(" %d",j);
			}
			printf("\n");
		}

	}
	return 0;
}



你可能感兴趣的:(HDU,暴力,多校联赛7)