ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#293 | #6. 「WyOJ Round 1」持 · 山海为肩 | recall | 10 | 4665ms | 14572kb | C++14 | 4.3kb | 2025-04-18 16:52:26 | 2025-04-18 18:04:53 |
answer
#include <bits/stdc++.h>
using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;
// using i128 = __int128;
// using u128 = unsigned __int128;
const int N = 1e5 + 5, M = 805;
int n, m;
double p[N], p1[M][25], p2[M][25], p3[M][25];
int a[N][25];
std::string name[3] = {"rock", "paper", "scissors"};
int win[3][3] = {
{0, -1, 1},
{1, 0, -1},
{-1, 1, 0}
};
inline int qpow(int a, int b) {
int res = 1;
while (b) {
if (b & 1) (res *= a);
(a *= a);
b >>= 1;
}
return res;
}
inline std::vector<int> rebuild(int S, int mm = -1) {
std::vector<int> nw;
while (S || nw.size() < mm) {
nw.push_back(S % 3);
S /= 3;
}
std::reverse(nw.begin(), nw.end());
return nw;
}
const double eps = 1e-6;
int main() {
std::ios::sync_with_stdio(0);
std::cin.tie(0), std::cout.tie(0);
std::cin >> n >> m;
for (int i = 1; i <= n; i++) {
std::cin >> p[i];
std::string s;
for (int j = 0; j < m; j++) {
std::cin >> s;
if (s == "rock") {
a[i][j] = 0;
} else if (s == "paper") {
a[i][j] = 1;
} else {
a[i][j] = 2;
}
}
}
int m1 = m / 3, m2 = m / 3, m3 = m / 3;
if (m % 3 == 2) {
m2++, m3++;
} else if (m % 3 == 1) {
m3++;
}
int up1 = qpow(3, m1), up2 = qpow(3, m2), up3 = qpow(3, m2);
for (int i = 0; i < up1; i++) {
auto now = rebuild(i, m1);
for (int j = 1; j <= n; j++) {
int c = 0;
for (int k = 0; k < m1; k++) {
c += win[now[k]][a[j][k]];
}
p1[i][c + m1] += p[j];
}
}
for (int i = 0; i < up2; i++) {
auto now = rebuild(i, m2);
for (int j = 1; j <= n; j++) {
int c = 0;
for (int k = 0, kk = m1; k < m2; k++, kk++) {
c += win[now[k]][a[j][kk]];
}
p2[i][c + m2] += p[j];
}
}
for (int i = 0; i < up3; i++) {
auto now = rebuild(i, m3);
for (int j = 1; j <= n; j++) {
int c = 0;
for (int k = 0, kk = m1 + m2; k < m3; k++, kk++) {
c += win[now[k]][a[j][kk]];
}
p3[i][c + m3] += p[j];
}
}
double ans = 0;
int a1 = 0, a2 = 0, a3 = 0, s1 = 0, s2 = 0, s3 = 0;
for (int i = 0; i < up1; i++) {
for (int j = 0; j < up2; j++) {
for (int k = 0; k < up3; k++) {
double pp = 0;
for (int w1 = 0; w1 <= 2 * m1; w1++) {
for (int w2 = 0; w2 <= 2 * m2; w2++) {
for (int w3 = 0; w3 <= 2 * m3; w3++) {
if (w1 + w2 + w3 >= m) {
pp += p1[i][w1] * p2[j][w2] * p3[k][w3];
// if(i == 0 && j == 0 && k == 0) {
// std::cerr << "HI: " << w1 << ' ' << w2 << ' ' << w3 << '\n' << p1[i][w1] << ' '<< p2[j][w2] << ' ' << p3[k][w3] << "\ned\n";
// }
}
}
}
}
if (pp - ans > eps) {
ans = pp;
a1 = i, a2 = j, a3 = k;
// std::cerr << pp << ' ' << ans << ' ' << i << ' ' << j << ' ' << k << '\n';
} else if (abs(pp - ans) <= eps) {
if (a1 > i) {
a1 = i, a2 = j, a3 = k;
} else if (a1 == i && a2 > j) {
a1 = i, a2 = j, a3 = k;
} else if (a1 == i && a2 == j && a3 > k) {
a1 = i, a2 = j, a3 = k;
}
}
}
}
}
std::cout << std::fixed << std::setprecision(6) << ans << "\n";
auto tp = rebuild(a1, m1);
for (auto v : tp) {
std::cout << name[v] << ' ';
}
tp = rebuild(a2, m2);
for (auto v : tp) {
std::cout << name[v] << ' ';
}
tp = rebuild(a3, m3);
for (auto v : tp) {
std::cout << name[v] << ' ';
}
return 0;
}
Details
小提示:点击横条可展开更详细的信息
Test #1:
score: 0
Wrong Answer
time: 3ms
memory: 3692kb
input:
841 5 0.002262 paper rock rock scissors scissors 0.000665 rock paper paper scissors paper 0.001132 s...
output:
0.667739 paper paper rock rock paper
result:
wrong answer 1st words differ - expected: '0.689135', found: '0.667739'
Test #2:
score: 10
Accepted
time: 1ms
memory: 3748kb
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: 0
Wrong Answer
time: 2ms
memory: 3576kb
input:
19 2 0.086520 scissors rock 0.028985 rock rock 0.056406 rock scissors 0.010732 scissors rock 0.04471...
output:
0.807831 scissors rock
result:
wrong answer 1st words differ - expected: '0.836348', found: '0.807831'
Test #4:
score: 0
Wrong Answer
time: 952ms
memory: 14496kb
input:
100000 12 0.000008 rock rock rock scissors paper scissors paper paper paper scissors paper scissors ...
output:
0.575711 rock rock rock paper scissors scissors scissors paper scissors rock scissors rock
result:
wrong answer 1st words differ - expected: '0.578764', found: '0.575711'
Test #5:
score: 0
Wrong Answer
time: 455ms
memory: 14264kb
input:
82918 11 0.000009 paper rock rock scissors scissors paper rock paper rock rock paper 0.000000 scisso...
output:
0.580744 paper rock paper paper paper rock rock rock scissors scissors rock
result:
wrong answer 1st words differ - expected: '0.582727', found: '0.580744'
Test #6:
score: 0
Wrong Answer
time: 179ms
memory: 12072kb
input:
63157 10 0.000004 rock scissors paper scissors paper scissors rock paper rock scissors 0.000007 rock...
output:
0.584125 rock scissors rock paper rock paper rock scissors rock paper
result:
wrong answer 1st words differ - expected: '0.587712', found: '0.584125'
Test #7:
score: 0
Wrong Answer
time: 976ms
memory: 14572kb
input:
100000 12 0.000003 rock rock rock paper paper rock paper paper paper rock rock scissors 0.000001 pap...
output:
0.576113 paper rock paper rock paper scissors rock scissors scissors scissors scissors paper
result:
wrong answer 1st words differ - expected: '0.578665', found: '0.576113'
Test #8:
score: 0
Wrong Answer
time: 417ms
memory: 11572kb
input:
72055 11 0.000006 rock scissors scissors rock scissors scissors scissors scissors rock scissors scis...
output:
0.580921 scissors rock paper rock rock rock paper rock scissors rock scissors
result:
wrong answer 1st words differ - expected: '0.584229', found: '0.580921'
Test #9:
score: 0
Wrong Answer
time: 724ms
memory: 9252kb
input:
49463 12 0.000024 rock paper scissors paper rock scissors rock paper paper paper paper paper 0.00000...
output:
0.580836 rock paper rock scissors paper scissors rock scissors paper paper rock paper
result:
wrong answer 1st words differ - expected: '0.584658', found: '0.580836'
Test #10:
score: 0
Wrong Answer
time: 956ms
memory: 14236kb
input:
100000 12 0.000007 rock paper scissors paper paper scissors rock rock scissors rock scissors paper 0...
output:
0.574633 rock paper paper rock paper paper scissors paper scissors rock paper rock
result:
wrong answer 1st words differ - expected: '0.578092', found: '0.574633'