QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#54253 | #4888. Decoding The Message | flower_and_qingyu# | WA | 2ms | 3648kb | C++20 | 2.0kb | 2022-10-07 17:42:24 | 2022-10-07 17:42:30 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
constexpr int N = 300, mod1 = 255, mod2 = 257, phi1 = 128, phi2 = 256;
int fpw(int a, int b, int mod) {
int ans = 1;
for(; b; b >>= 1, a = 1ll * a * a % mod) if(b & 1) ans = 1ll * ans * a % mod;
return ans;
}
int main() {
// freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0);
int T;
for(cin >> T; T; T --) {
int k, s = 0, n = 0;
cin >> k;
vector<int> vec;
for(int i = 0; i < k; i ++) {
int di, ci;
cin >> di >> ci;
s = (s + 1ll * di * ci) % mod1;
n += ci;
for(int i = 0; i < ci; i ++) vec.emplace_back(di);
}
int facn = 1;
if(n < 8) {
for(int i = 1; i <= n; i ++){
facn = facn * i;
}
}
else facn = 2 * phi1;
int ans1 = fpw(s, facn, mod1), ans2 = 1;
// cout << ans1 << '\n';
if(n < 12) {
int m = (n + 1) / 2;
vector<vector<vector<int>>> f(n + 1, vector<vector<int>> (m + 1, vector<int> (mod2)));
f[0][0][0] = 1;
// cout << "-----------\n";
for(int i = 0; i < n; i ++) {
for(int j = 0; j <= m; j ++) {
for(int s = 0; s < mod2; s ++) if(f[i][j][s]) {
if(j < m) f[i + 1][j + 1][(s + vec[i]) % mod2] += f[i][j][s];
f[i + 1][j][(s - vec[i] + mod2) % mod2] += f[i][j][s];
}
}
}
int w = 1;
for(int i = 1; i <= m; i ++) w = w * i;
for(int i = 1; i <= n - m; i ++) w = w * i;
// cout << w << '\n';
for(int i = 0; i < mod2; i ++) if(f[n][m][i]) {
// cout << i << ": " << w << ' ' << f[n][m][i] << '\n';
ans2 = 1ll * ans2 * fpw(i, 1ll * f[n][m][i] * w % phi2, mod2) % mod2;
}
}
else ans2 = 1;
auto crt = [&] (int m1, int a1, int m2, int a2) {
int d = a2 - a1, m = m1 * m2;
int x, y;
function<void(int, int, int&, int &)> exgcd =[&] (int a, int b, int &x, int &y) {
if(!b) return x = 1, y = 0, void();
exgcd(b, a % b, y, x), y -= a / b * x;
};
exgcd(m1, m2, x, y);
x *= d;
return ((a1 + m1 * x) % m + m) % m;
};
cout << crt(mod1, ans1, mod2, ans2) << '\n';
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 3576kb
input:
5 1 42 1 2 0 1 1 1 1 239 2 2 1 1 2 1 3 1 1 2 2 3 2
output:
42 256 514 1284 61726
result:
ok 5 number(s): "42 256 514 1284 61726"
Test #2:
score: -100
Wrong Answer
time: 2ms
memory: 3648kb
input:
100 1 213 79 1 54 69 1 218 55 1 248 80 1 101 8 1 153 79 1 240 45 1 112 70 1 217 5 1 208 64 1 48 30 1 0 19 1 53 40 1 63 17 1 179 65 1 221 22 1 135 84 1 138 20 1 54 29 1 114 19 1 253 94 1 240 36 1 40 94 1 244 93 1 239 24 1 133 8 1 105 91 1 45 43 1 241 74 1 206 17 1 100 73 1 133 44 1 57 70 1 56 72 1 47...
output:
21846 21846 26215 26215 32896 6426 48060 26215 43570 1 48060 32640 26215 6426 26215 50116 48060 48060 21846 21846 1 48060 26215 21846 21846 32896 48060 48060 1 50116 26215 1 48060 21846 6426 50116 48060 21846 21846 6426 21846 21846 6426 21846 1 26215 26215 26215 21846 48060 48060 22101 26215 26215 1...
result:
wrong answer 4th numbers differ - expected: '59110', found: '26215'