神防AK题!卒
这一发30
#include <algorithm>#include <cstdio>#include <cstdlib>#include <cstring>#define MOD 1000000007#define MAXN 210inlineint***(intx, intp) {inty = 1;for(; p; p >>= 1) {if(p & 1) y = 1LL * y * x % MOD;x = 1LL * x * x % MOD;}returny;}inlinevoidup(int&x, inty) {if((x += y) >= MOD) x -= MOD;}intn, m, a[MAXN][MAXN], s[4][MAXN][MAXN][MAXN], ans[MAXN][MAXN];inlineboolvalid(intx, inty) {returnx >= 1 && x <= n && y >= 1 && y <= m;}inlineint$(intx, inty) {returnvalid(x, y) ? a[x][y] : 0;}intmain() {scanf("%d%d", &n, &m);for(inti = 1, x; i <= n; i++) {for(intj = 1, y; j <= m; j++) {scanf("%d%d", &x, &y);a[i][j] = 1LL * x * ***(y, MOD - 2) % MOD;}}for(inti = 1; i <= n; i++) {for(intj = 1; j <= m; j++) {int*p = s[0][i][j];p[0] = a[i][j];for(intk = 1; k <= n && k <= m; k++) {p[k] = 1LL * p[k - 1] * $(i + k, j + k) % MOD;}p = s[1][i][j];p[0] = a[i][j];for(intk = 1; k <= n && k <= m; k++) {p[k] = 1LL * p[k - 1] * $(i + k, j - k) % MOD;}p = s[2][i][j];p[0] = a[i][j];for(intk = 1; k <= n && k <= m; k++) {p[k] = 1LL * p[k - 1] * $(i - k, j + k) % MOD;}p = s[3][i][j];p[0] = a[i][j];for(intk = 1; k <= n && k <= m; k++) {p[k] = 1LL * p[k - 1] * $(i - k, j - k) % MOD;}}}for(inti = 1; i <= n; i++) {for(intj = 1; j <= m; j++) {intp = a[i][j];up(ans[i][j], p);for(intk = 1; k <= n && k <= m; k++) {if(!valid(i - k, j) || !valid(i, j - k) || !valid(i + k, j) || !valid(i, j + k)) break;int*q = s[0][i - k][j];int*w = s[1][i][j + k];int*e = s[3][i + k][j];int*r = s[2][i][j - k];p = 1LL * p * q[k - 1] % MOD * e[k - 1] % MOD * w[k - 1] % MOD * r[k - 1] % MOD;up(ans[i][j], p);if(!p) break;}}}for(inti = 1; i <= n; i++) {for(intj = 1; j <= m; j++) printf("%d ", ans[i][j]);puts("");}return0;}
这一发100
#include <algorithm>#include <cstdio>#include <cstdlib>#include <cstring>#define MOD 1000000007inlineint***(intx, intp) {inty = 1;for(; p; p >>= 1) {if(p & 1) y = 1LL * y * x % MOD;x = 1LL * x * x % MOD;}returny;}inlinevoidup(int&x, inty) {if((x += y) >= MOD) x -= MOD;}intn, m, a[201][201], s[4][201][201][101], ans[201][201];inlineboolvalid(intx, inty) {returnx >= 1 && x <= n && y >= 1 && y <= m;}inlineint$(intx, inty) {returnvalid(x, y) ? a[x][y] : 0;}intmain() {scanf("%d%d", &n, &m);int***er = std::min(n, m) / 2;for(inti = 1, x; i <= n; i++) {for(intj = 1, y; j <= m; j++) {scanf("%d%d", &x, &y);a[i][j] = 1LL * x * ***(y, MOD - 2) % MOD;}}for(inti = 1; i <= n; i++) {for(intj = 1; j <= m; j++) {int*p = s[0][i][j];p[0] = a[i][j];for(intk = 1; k <= ***er; k++) {p[k] = 1LL * p[k - 1] * $(i + k, j + k) % MOD;}p = s[1][i][j];p[0] = a[i][j];for(intk = 1; k <= ***er; k++) {p[k] = 1LL * p[k - 1] * $(i + k, j - k) % MOD;}p = s[2][i][j];p[0] = a[i][j];for(intk = 1; k <= ***er; k++) {p[k] = 1LL * p[k - 1] * $(i - k, j + k) % MOD;}p = s[3][i][j];p[0] = a[i][j];for(intk = 1; k <= ***er; k++) {p[k] = 1LL * p[k - 1] * $(i - k, j - k) % MOD;}}}for(inti = 1; i <= n; i++) {for(intj = 1; j <= m; j++) {intp = a[i][j];up(ans[i][j], p);for(intk = 1; k <= ***er; k++) {if(!valid(i - k, j) || !valid(i, j - k) || !valid(i + k, j) || !valid(i, j + k)) break;int*q = s[0][i - k][j];int*w = s[1][i][j + k];int*e = s[3][i + k][j];int*r = s[2][i][j - k];p = 1LL * p * q[k - 1] % MOD * e[k - 1] % MOD * w[k - 1] % MOD * r[k - 1] % MOD;up(ans[i][j], p);if(!p) break;}}}for(inti = 1; i <= n; i++) {for(intj = 1; j <= m; j++) printf("%d ", ans[i][j]);puts("");}return0;}
全部评论
(5) 回帖