JZOJ6406. 【NOIP2019模擬11.05】小 D 與原題

Description

在這裏插入圖片描述
n<=1000n<=1000

Solution

  • 構造題,做法簡單,思路奇妙(打表找規律)。
  • 一種構造方法是按順序將(1,2)(1,3)…(1,n)(2,3)(2,4)…(n-1,n)加入n-1組裏面。
    如果上一個加到了第i組裏面,那麼下一個就要從i+1組開始判斷能不能加進去。
  • 還有另一種構造是這樣的:
    在這裏插入圖片描述
    相當於是枚舉匹配的(i,j)的中間點(可以假定將n翻成2n),還剩下一個就是2p了。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define maxn 1005
using namespace std;

int n,i,j,k,bz[maxn][maxn];

int main(){
//	freopen("problem.in","r",stdin);
//	freopen("problem.out","w",stdout);
	scanf("%d",&n);
	for(i=0;i<n;i++){
		for(j=0;j<n;j++) if ((j+j)%(n-1)==i){
			printf("%d %d ",j+1,n),bz[j][n-1]=bz[n-1][j]=1;
			break;
		}
		for(j=0;j<n-1;j++){
			k=(i+n-1-j)%(n-1);
			if (!bz[j][k]&&j!=k) {
				printf("%d %d ",j+1,k+1),bz[j][k]=bz[k][j]=1;
			}
		}
		printf("\n");
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章