AGC027D - Modulo Matrix
生活随笔
收集整理的這篇文章主要介紹了
AGC027D - Modulo Matrix
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
AGC027D - Modulo Matrix
題目描述
Solution
有一個顯然的想法是先填一部分格子,剩下的格子的即為相鄰格子的LCM+1LCM+1LCM+1,但這樣填寫的數(shù)呈指數(shù)級增長,并不優(yōu)秀。
我們發(fā)現(xiàn)一個格子的數(shù)是否可以填寫只和相鄰的四個格子有關系,因此考慮黑白染色,同種顏色的各自之間互不影響。倘若我們固定了黑格子中的數(shù),則白格子的數(shù)也就能夠固定。
一個巧妙的方法是給每一條黑色的主對角線固定一個素數(shù)作為權值,每一條黑色的副對角線也固定一個素數(shù)作為權值,且這些素數(shù)兩兩不同。令黑格子的權值為主對角線權值×副對角線權值,白格子權值為LCM+1LCM+1LCM+1,這樣數(shù)的大小就不會超過101510^{15}1015了。
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <cctype> #include <string> #include <cstring> #include <ctime> #include <cassert> #include <string.h> //#include <unordered_set> //#include <unordered_map> //#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B) #define PB(A) push_back(A) #define SIZE(A) ((int)A.size()) #define LEN(A) ((int)A.length()) #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define fi first #define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; } template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll; typedef unsigned long long ull; typedef long double lod; typedef pair<int,int> PR; typedef vector<int> VI;const lod eps=1e-11; const lod pi=acos(-1); const int oo=1<<30; const ll loo=1ll<<62; const int mods=998244353; const int MAXN=1005; const int INF=0x3f3f3f3f;//1061109567 /*--------------------------------------------------------------------*/ inline int read() {int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f; } ll a[MAXN][MAXN],prime[MAXN]; bool check(int x) {for (int i=2;1ll*i*i<=x;i++)if (x%i==0) return 0;return 1; } ll gcd(ll x,ll y) { return y==0?x:gcd(y,x%y); } int main() {int n=read(),num=0;if (n==2) { printf("4 7\n23 10\n"); return 0; }for (int i=2;i<=100000;i++)if (check(i)){prime[++num]=i;if (num==n<<1) break;}for (int i=0;i<=n+1;i++)for (int j=0;j<=n+1;j++) a[i][j]=1;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){if ((i&1)^(j&1)) continue;a[i][j]=prime[(i+j)>>1]*prime[n+((i-j+n+1)>>1)];}for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)if ((i&1)^(j&1)) a[i][j]=max(a[i-1][j]*a[i+1][j],a[i][j-1]*a[i][j+1])+1;if ((n+1)&1){a[n][1]=a[n-1][1]*a[n][2]/gcd(a[n-1][1],a[n][2])+1;a[1][n]=a[2][n]*a[1][n-1]/gcd(a[2][n],a[1][n-1])+1;}for (int i=1;i<=n;i++){for (int j=1;j<=n;j++) printf("%lld ",a[i][j]);puts("");}return 0; }總結
以上是生活随笔為你收集整理的AGC027D - Modulo Matrix的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (http服务器linux)
- 下一篇: 手机授权店(手机店备案)