BUAA 更大公约数
生活随笔
收集整理的這篇文章主要介紹了
BUAA 更大公约数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接
給一個(gè)n*m的矩陣, 刪除里面的一行一列, 使得剩下的數(shù)的最大公約數(shù)最大。
一個(gè)格子(x,y), 先預(yù)處理出(1,1)到這個(gè)格子的內(nèi)所有數(shù)的最大公約數(shù), 同理處理出(1, m), (n, m), (n, 1), 然后枚舉格子中的每一個(gè)數(shù), 具體看代碼。
#include<bits/stdc++.h> using namespace std; #define mem(a) memset(a, 0, sizeof(a)) const int maxn = 1080; int a[maxn][maxn], b[maxn][maxn], c[maxn][maxn], d[maxn][maxn]; int init[maxn][maxn]; int gcd(int a, int b) {return b == 0?a:gcd(b, a%b); } int main() {int n, m;while(cin>>n>>m) {for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++)scanf("%d", &init[i][j]);}mem(a); mem(b); mem(c); mem(d);for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {a[i][j] = gcd(a[i][j-1], a[i-1][j]);a[i][j] = gcd(a[i][j], init[i][j]);}}for(int i = 1; i<=n; i++) {for(int j = m; j>=1; j--) {b[i][j] = gcd(b[i][j+1], b[i-1][j]);b[i][j] = gcd(b[i][j], init[i][j]);}}for(int i = n; i>=1; i--) {for(int j = 1; j<=m; j++) {c[i][j] = gcd(c[i][j-1], c[i+1][j]);c[i][j] = gcd(c[i][j], init[i][j]);}}for(int i = n; i>=1; i--) {for(int j = m; j>=1; j--) {d[i][j] = gcd(d[i][j+1], d[i+1][j]);d[i][j] = gcd(d[i][j], init[i][j]);}}int ans = 0;for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {int tmp1 = gcd(a[i-1][j-1], b[i-1][j+1]);int tmp2 = gcd(c[i+1][j-1], d[i+1][j+1]);ans = max(ans, gcd(tmp1, tmp2));}}cout<<ans<<endl;}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/yohaha/p/5063196.html
總結(jié)
以上是生活随笔為你收集整理的BUAA 更大公约数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 招行e分期逾期怎么办?及时补救是上策
- 下一篇: 启动Tomcat 7一闪而过的问题