ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#316 | #6. 「WyOJ Round 1」持 · 山海为肩 | cxm1024 | 100 | 4677ms | 20600kb | C++23 | 2.2kb | 2025-04-18 17:36:34 | 2025-04-18 18:34:25 |
answer
#include <bits/stdc++.h>
#define deb cout << "in " << __LINE__ << "\t: "
using namespace std;
const string str = "rps";
string out[3] = {"rock", "paper", "scissors"};
#define int long long
struct node {
int a, b;
node() {}
node(int x, int y) {a = x, b = y;}
};
node operator * (node a, node b) {
return {a.a * b.a - a.b * b.b, a.b * b.a + a.a * b.b - a.b * b.b};
}
node operator + (node a, node b) {
return {a.a + b.a, a.b + b.b};
}
int n, m, pw[13];
node a[550000], b[550000], w1, w2;
void fwt(node *f) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < pw[m]; j++) {
if (j / pw[i] % 3) continue;
node x = f[j], y = f[j + pw[i]], z = f[j + pw[i] * 2];
f[j] = x + y + z;
f[j + pw[i]] = x + y * w1 + z * w2;
f[j + pw[i] * 2] = x + y * w2 + z * w1;
}
}
}
void ifwt(node *f) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < pw[m]; j++) {
if (j / pw[i] % 3) continue;
node x = f[j], y = f[j + pw[i]], z = f[j + pw[i] * 2];
f[j] = x + y + z;
f[j + pw[i]] = x + y * w2 + z * w1;
f[j + pw[i] * 2] = x + y * w1 + z * w2;
}
for (int j = 0; j < pw[m]; j++) {
assert(f[j].a % 3 == 0 && f[j].b % 3 == 0);
f[j].a /= 3, f[j].b /= 3;
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> m, w1 = {0, 1}, w2 = {-1, -1};
pw[0] = 1;
for (int i = 1; i <= 12; i++)
pw[i] = pw[i - 1] * 3;
for (int i = 1; i <= n; i++) {
double p;
cin >> p;
int val = p * 1000000 + 0.5, ind = 0;
for (int j = 1; j <= m; j++) {
string s;
cin >> s;
ind += pw[m - j] * str.find(s[0]);
}
a[ind].a += val;
}
for (int i = 0; i < pw[m]; i++) {
int sum = 0;
for (int j = 0; j < m; j++) {
if (i / pw[j] % 3 == 1) sum++;
else if (i / pw[j] % 3 == 2) sum--;
}
if (sum >= 0) b[i].a = 1;
}
fwt(a), fwt(b);
for (int i = 0; i < pw[m]; i++)
a[i] = a[i] * b[i];
ifwt(a);
int mx = 0;
for (int i = 0; i < pw[m]; i++) {
mx = max(mx, a[i].a);
assert(!a[i].b);
}
cout << fixed << setprecision(6) << mx / 1000000.0 << "\n";
for (int i = 0; i < pw[m]; i++)
if (a[i].a == mx) {
for (int j = m - 1; j >= 0; j--)
cout << out[i / pw[j] % 3] << " ";
cout << "\n";
break;
}
return 0;
}
这程序好像有点Bug,我给组数据试试?
Details
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 3ms
memory: 5752kb
input:
841 5 0.002262 paper rock rock scissors scissors 0.000665 rock paper paper scissors paper 0.001132 s...
output:
0.689135 paper paper rock rock paper
result:
ok 6 tokens
Test #2:
score: 10
Accepted
time: 2ms
memory: 5752kb
input:
320 1 0.001734 rock 0.000432 rock 0.003306 scissors 0.000322 paper 0.000380 rock 0.000817 scissors 0...
output:
0.728099 rock
result:
ok 2 tokens
Test #3:
score: 10
Accepted
time: 4ms
memory: 5748kb
input:
19 2 0.086520 scissors rock 0.028985 rock rock 0.056406 rock scissors 0.010732 scissors rock 0.04471...
output:
0.836348 scissors rock
result:
ok 3 tokens
Test #4:
score: 10
Accepted
time: 972ms
memory: 20488kb
input:
100000 12 0.000008 rock rock rock scissors paper scissors paper paper paper scissors paper scissors ...
output:
0.578764 rock rock paper paper paper paper scissors paper scissors rock paper rock
result:
ok 13 tokens
Test #5:
score: 10
Accepted
time: 385ms
memory: 11296kb
input:
82918 11 0.000009 paper rock rock scissors scissors paper rock paper rock rock paper 0.000000 scisso...
output:
0.582727 paper rock paper paper paper scissors rock paper scissors scissors rock
result:
ok 12 tokens
Test #6:
score: 10
Accepted
time: 180ms
memory: 6604kb
input:
63157 10 0.000004 rock scissors paper scissors paper scissors rock paper rock scissors 0.000007 rock...
output:
0.587712 rock scissors rock paper rock rock rock paper rock paper
result:
ok 11 tokens
Test #7:
score: 10
Accepted
time: 945ms
memory: 20476kb
input:
100000 12 0.000003 rock rock rock paper paper rock paper paper paper rock rock scissors 0.000001 pap...
output:
0.578665 paper rock scissors scissors rock paper scissors rock scissors scissors rock paper
result:
ok 13 tokens
Test #8:
score: 10
Accepted
time: 379ms
memory: 11588kb
input:
72055 11 0.000006 rock scissors scissors rock scissors scissors scissors scissors rock scissors scis...
output:
0.584229 paper rock paper rock rock rock paper scissors scissors rock scissors
result:
ok 12 tokens
Test #9:
score: 10
Accepted
time: 861ms
memory: 20600kb
input:
49463 12 0.000024 rock paper scissors paper rock scissors rock paper paper paper paper paper 0.00000...
output:
0.584658 rock paper scissors scissors paper scissors rock rock paper scissors rock paper
result:
ok 13 tokens
Test #10:
score: 10
Accepted
time: 946ms
memory: 20452kb
input:
100000 12 0.000007 rock paper scissors paper paper scissors rock rock scissors rock scissors paper 0...
output:
0.578092 rock scissors paper scissors paper paper paper rock rock paper paper rock
result:
ok 13 tokens
Extra Test:
score: 0
Extra Test Passed