1. 程式人生 > 其它 >CF803A Maximal Binary Matrix 構造

CF803A Maximal Binary Matrix 構造

技術標籤:思維構造

題意: 在 n ∗ n 的 矩 陣 中 放 入 k 個 1 , 保 證 矩 陣 沿 對 角 線 對 稱 , 字 典 序 最 大 , 字 典 序 是 從 第 一 行 從 左 到 右 開 始 比 在n*n的矩陣中放入k個1,保證矩陣沿對角線對稱,字典序最大,字典序是從第一行從左到右開始比 nnk1沿
題解:這題模擬就可,但有細節當

  1. 當k>n*n無解
  2. k=0,k=n*n時
  3. 對於一般情況,考慮構造法則,設p指標為(i,j)開始時i=1,j=1,當k>=2時對稱的填兩個,第一行填滿了,就要換到第二行,仔細觀察只要保證i<=j,就不會重複了。
#include<bits/stdc++.h>
using namespace std;
int n,k;
int mp[220][220];


int main(){
	scanf("%d%d",&n,&k);
	if(n*n<k) {
		printf("-1\n");return 0;
	}
	if(n*n==k){
		for(int i=1;i<=n;i++) {
			for(int j=1;j<=n;j++) printf("%d ",1);
			printf("\n"
); } return 0; } if(k==0){ for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) printf("%d ",0); printf("\n"); } return 0; } int i=1,j=1;//i行,j列 while(k){ j=i; mp[i][j]=1;k--; while(k>=2 && j<n){ j++; mp[i][j]=1;k--; mp[j][i]=1;k--; }
i++; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) printf("%d ",mp[i][j]); printf("\n"); } return 0; }