QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#397539 | #3744. Fixed Point | SamponYW | AC ✓ | 183ms | 31688kb | C++14 | 1.8kb | 2024-04-24 11:58:16 | 2024-04-24 11:58:16 |
Judging History
answer
#include <bits/stdc++.h>
#define db double
#define il inline
#define re register
#define ll long long
#define ui unsigned
#define ull ui ll
#define i128 __int128
#define pii pair<int, int>
#define fi first
#define se second
#define eb emplace_back
#define SZ(v) (int)v.size()
#define ALL(v) v.begin(), v.end()
#define mems(v, x) memset(v, x, sizeof(v))
#define memc(a, b) memcpy(a, b, sizeof(a))
#define FOR(i, L, R) for(re int i = (L); i <= (R); ++i)
#define ROF(i, R, L) for(re int i = (R); i >= (L); --i)
#define LS i << 1, l, mid
#define RS i << 1 | 1, mid + 1, r
#define popc(x) __builtin_popcount(x)
using namespace std;
#define N 100005
#define M 10
int n, m, T, a[N], b[N], p[N], q[N], id[N];
bool u[N]; vector<int> cnt[M][N], c[M];
il void WORK() {
FOR(i, 1, m) cin >> a[i] >> b[i], a[i + m] = a[i], b[i + m] = b[i];
FOR(r, 0, m - 1) {
vector<int>().swap(c[r]);
FOR(i, 1, n) vector<int>().swap(cnt[r][i]);
FOR(i, 1, n) p[i] = q[i] = i, u[i] = 0, id[i] = -1;
FOR(i, 1, r) reverse(p + a[i], p + b[i] + 1);
FOR(i, 1, m) reverse(q + a[i + r], q + b[i + r] + 1);
FOR(i, 1, n) if(!u[i]) {
int x = i, k = 0; vector<int> v;
while(!u[x]) u[x] = 1, id[x] = k++, v.eb(x), x = q[x];
cnt[r][k].resize(k), c[r].eb(k);
for(auto x : v) {
if(id[p[x]] == -1) continue;
++cnt[r][k][(id[x] - id[p[x]] + k) % k];
}
for(auto x : v) id[x] = -1;
}
sort(ALL(c[r])), c[r].erase(unique(ALL(c[r])), c[r].end());
}
while(T--) {
int k; cin >> k;
int r = k % m, t = k / m, ans = 0;
for(auto x : c[r]) ans += cnt[r][x][t % x];
cout << ans << "\n";
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
while(cin >> n >> m >> T) WORK();
cerr << 1.0 * clock() / CLOCKS_PER_SEC;
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 183ms
memory: 31688kb
input:
100000 10 100000 3135 43886 11880 99989 6753 75994 49859 61511 34135 56769 36040 94909 31157 40208 1045 52859 17015 29390 34992 75590 427894487 754397106 304363104 288735752 794969909 361436976 343784951 800838635 507520362 111733743 43029867 107598330 993009440 179455786 17298032 187551627 96418485...
output:
1055 1055 1056 1057 1056 1785 1055 1056 1055 1057 1055 1055 1785 1055 1056 1055 1055 1056 1055 1785 1055 1056 1060 1055 1057 1056 1785 1056 1057 6417 3372 1057 1055 1057 1068 3371 1055 1055 1785 1055 1055 6417 1056 1056 1787 1055 1061 1056 1055 1056 1055 1056 1786 1056 1055 1811 1785 4101 1785 1055 ...
result:
ok 500000 numbers