constint MAXN = 1E3 + 5; constint MOD = 1E9 + 7; int n, m; LL a[MAXN][MAXN], mi1[MAXN][MAXN], mi2[MAXN][MAXN], c;
signedmain(){ // freopen("1.in", "r", stdin); ios::sync_with_stdio(false); cin >> n >> m >> c; for (int i = 0; i <= n + 1; i++) for (int j = 0; j <= m + 1; j++) mi1[i][j] = mi2[i][j] = LONG_LONG_MAX; LL ans = LONG_LONG_MAX; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> a[i][j]; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) mi1[i][j] = min({a[i][j] - c * (i + j), mi1[i][j - 1], mi1[i - 1][j]}); for (int i = 1; i <= n; i++) for (int j = m; j >= 1; j--) mi2[i][j] = min({a[i][j] - c * (i - j), mi2[i][j + 1], mi2[i - 1][j]}); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { if (i > 1) ans = min(ans, a[i][j] + c * (i + j) + mi1[i - 1][j]); if (j > 1) ans = min(ans, a[i][j] + c * (i + j) + mi1[i][j - 1]); if (i > 1) ans = min(ans, a[i][j] + c * (i - j) + mi2[i - 1][j]); if (j < m) ans = min(ans, a[i][j] + c * (i - j) + mi2[i][j + 1]); } cout << ans; return0; }
int n, tot, cntscc, top, N; int dfn[MAXV], low[MAXV], stk[MAXV], ins[MAXV], belong[MAXV]; array<int, MAXN> a, b; vector<int> primes; vector<int> ids[MAXV], g[MAXV];
voidseive(){ vector<bool> isprime(MAXV); fill(isprime.begin(), isprime.end(), true); isprime[0] = isprime[1] = false; for (int i = 2; i < MAXV; i++) { if (isprime[i]) primes.push_back(i); for (auto& j : primes) { if (i * j >= MAXV) break; isprime[i * j] = false; if (i % j == 0) break; } } }
voidadd(int u, int v){ g[u].push_back(v); }
voidtarjan(int cur){ dfn[cur] = low[cur] = ++tot; stk[++top] = cur, ins[cur] = true; for (constauto& to : g[cur]) { if (!dfn[to]) { tarjan(to); low[cur] = min(low[cur], low[to]); } elseif (ins[to]) { low[cur] = min(low[cur], dfn[to]); } } if (dfn[cur] == low[cur]) { ++cntscc; int tmp; do { tmp = stk[top--]; ins[tmp] = false; belong[tmp] = cntscc; } while (cur != tmp); } }
intmain(){ boost; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i] >> b[i]; ids[a[i]].push_back(i); ids[b[i]].push_back(i + n); // 某个值对应所有节点编号 } seive(); vector<int> nodes; N = 2 * n; for (auto& i : primes) { nodes.clear(); for (int j = i; j < MAXV; j += i) { // p, 2p, ... kp for (constauto& id: ids[j]) nodes.push_back(id); } for (int j = N + 1; j <= N + nodes.size(); j++) { int x = nodes[j - N - 1]; int nx = x > n ? x - n : x + n; add(j, nx); if (j > N + 1) add(j, j - 1), add(x, j - 1); } for (int j = N + nodes.size() + 1; j <= N + nodes.size() * 2; j++) { int x = nodes[j - N - nodes.size() - 1]; int nx = x > n ? x - n : x + n; add(j, nx); if (j != N + nodes.size() * 2) add(j, j + 1), add(x, j + 1); } N += nodes.size() * 2; } for (int i = 1; i <= 2 * n; i++) if (!dfn[i]) tarjan(i); for (int i = 1; i <= n; i++) if (belong[i] == belong[i + n]) { cout << "No\n"; return0; } cout << "Yes\n"; return0; }