Codeforces Round #822 (Div. 2) E. Rectangular Congruence 构造

不管是看起来还是实际上都很难直接构造。

先分析性质 题目中说的就是 aij,bkf 交换列为 aif,bkj 他们的和不相等。

考虑每行构造一个等差数列 那么若\((j-f)*d1=(j-f)*d2\) 必有 d1=d2 显然。

那么就是每行d不相同即可。恰好n行 恰好n个d。

核心是想到可以构造等差数列。

code
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<ctime>
#include<cctype>
#include<queue>
#include<deque>
#include<stack>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#define ll long long
#define db double
#define INF 2000000000
#define inf 100000000000000000ll
#define ldb long double
#define pb push_back
#define put_(x) printf("%d ",x);
#define get(x) x=read()
#define putl(x) printf("%lld\n",x)
#define rep(p,n,i) for(int i=p;i<=n;++i)
#define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define pii pair<int,int>
#define mk make_pair
#define P 1000000007ll
#define gf(x) scanf("%lf",&x)
#define pf(x) ((x)*(x))
#define uint unsigned long long
#define ui unsigned
#define sq sqrt
#define l(x) s[x].l
#define r(x) s[x].r
#define S second
#define mod 1000000007
#define sc(A) scanf("%d",&A)
#define scs(A) scanf("%s",A);
#define put(A) printf("%d\n",A)
#define min(x,y) (x>=y?y:x)
#define max(x,y) (x>=y?x:y)
using namespace std;
const int MAXN=352;
int len,n,m,T,sum;
int a[MAXN],b[MAXN][MAXN];
int main()
{
	freopen("1.in","r",stdin);
	sc(n);
	rep(1,n,i)sc(a[i]);
	rep(1,n,i)
	{
		rep(1,n,j)
		{
			b[i][j]=(a[i]+i*(n+j-i))%n;
			put_(b[i][j]);
		}
		puts("");
	}
	return 0;
}
posted @ 2022-11-21 21:52  chdy  阅读(21)  评论(0编辑  收藏  举报