hdu4671(다교리그 7--수 시뮬레이션)

1498 단어 HDU폭력다교리그
클릭하여 링크 열기
제목:
n과 서버, m개의 데이터베이스가 있고 모든 데이터베이스는 서버를 연결해야 하지만 모든 데이터베이스는 서버를 연결하는 우선순위가 있습니다.모든 데이터베이스의 서버 우선순위를 구하다.또한 한 대의 서버가 고장난 상황에서 다른 서버의 균형을 보증한다(i, j는 각각 서버를 표시하고 A[i], A[j]는 해당 서버가 연결된 데이터베이스의 수를 나타낸다. 균형은 임의의 i와 j를 가리킨다. 모두 |A[i]-A[j]|<=1을 보증한다. 즉, 한 대 또는 두 대가 바뀌면 다른 서버가 연결된 데이터베이스의 수를 평균적으로 분배해야 한다는 것이다.
기껏해야 한 대가 고장났기 때문에 두 분만 생각하시면 됩니다.
n>m일 때
1 n...
2 n...
3 n...
n=m일 때 마지막 줄을 n1로 바꿔서...
n나는 첫 번째 열을 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("
"); } } return 0; }

좋은 웹페이지 즐겨찾기