好耶这是一篇blog
摸鱼大半个学期总算实际做出来了
一些测试:

C - Another Distinct Values(By EnderTime)
题意: 往一个n×n的矩阵里填入1,0和-1,要求最后矩阵的各行的和以及各列的和各不相同。
可以通过灵感大成功枚举几项发现n为奇数的方阵是无解的,偶数的都有解(具体严谨的证明可以看看别人的证明)。
至于构造答案的方法就五花八门了,一种比较方便输出的就是:以副对角线为界,将矩阵左上角三角形内全部设置为1,右下角的三角形内全部设置为-1。(此时只有交点处于主对角线上的一对行和列它们的和相等,而并排的两列或两行都相差2,那么只要把它们与副对角线的交点设置值不同且相差不超过2的值即可)总之只要在副对角线上隔一个0设置一个1即可。
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
inline void prt(int n,int k){ for(int i=1;i<=n;i++) cout << k << ' '; }
void solve(){ int n; cin >> n; if(n&1){ cout << "impossible" << endl; return; } cout << "possible" << endl; for(int i=1;i<=n;i++){ prt(i-1,1); prt(1,i&1); prt(n-i,-1); cout << endl; } }
int main(){ int t; cin >> t; while(t--) solve(); return 0; }
|