Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37619 | 林芳菲 | 【J】T2 | C++ | 通过 | 100 | 143 MS | 2596 KB | 1324 | 2025-04-23 20:51:56 |
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; const int MOD = 1e9 + 7; int n; int m[200010]; int a[200010]; int s[200010]; long long ans = 1; long long pw(int y) { if (y <= 0) return 1; long long ret = 1, a = 2; while (y != 0) { if (y & 1) ret = ret * a % MOD; a = a * a % MOD; y >>= 1; } return ret; } int main() { // freopen("hole.in", "r", stdin); // freopen("hole.out", "w", stdout); cin >> n; for (int i = 1; i <= n; i++) cin >> m[i]; for (int i = 1; i <= n; i++) cin >> a[i]; int maxn = 1e9; for (int i = 1; i <= n; i++) { s[i] = min(a[i] - 1, m[i] - a[i]); maxn = min(maxn, max(a[i] - 1, m[i] - a[i])); } sort(s + 1, s + n + 1); int cnt = 0; for (int i = 1; i <= n; i++) { if (s[i] > maxn) break; cnt++; } s[0] = 0; s[cnt + 1] = maxn; for (int i = 0; i <= cnt; i++) { int l = max(1, s[i] + 1); int r = min(maxn, s[i + 1]); if (l > r) continue; long long val = 1LL * (r - l + 1) * pw(n - i) % MOD; ans = (ans + val) % MOD; } cout << ans << endl; fclose(stdin); fclose(stdout); return 0; }