CF803A Maximal Binary Matrix 構造
阿新 • • 發佈:2021-01-20
題意:
在
n
∗
n
的
矩
陣
中
放
入
k
個
1
,
保
證
矩
陣
沿
對
角
線
對
稱
,
字
典
序
最
大
,
字
典
序
是
從
第
一
行
從
左
到
右
開
始
比
在n*n的矩陣中放入k個1,保證矩陣沿對角線對稱,字典序最大,字典序是從第一行從左到右開始比
在n∗n的矩陣中放入k個1,保證矩陣沿對角線對稱,字典序最大,字典序是從第一行從左到右開始比
題解:這題模擬就可,但有細節當
- 當k>n*n無解
- k=0,k=n*n時
- 對於一般情況,考慮構造法則,設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;
}