Logo Wy Online Judge

WyOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#271#6. 「WyOJ Round 1」持 · 山海为肩jxy2012106215ms18292kbC++233.8kb2025-04-18 15:11:232025-04-18 18:03:20

answer

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;
const int N = 200005;
const int INF = 0x3f3f3f3f;
int cal(string s) {
    if (s[0] == 'r') return 0;
    if (s[0] == 'p') return 1;
    return 2;
}
struct Node {
    int id1, id2;
    double p;
    vector<char> vec1, vec2;
};
int D[3][3] = {{0, 0, 1}, {1, 0, 0}, {0, 1, 0}};
int main() {
    int n, m;
    cin >> n >> m;
    int m1 = m / 2, m2 = m - m1;
    vector<Node> vec;
    for (int i = 0; i < n; i++) {
        double p;
        cin >> p;
        vector<int> a(m);
        for (int j = 0; j < m; j++) {
            string s;
            cin >> s;
            a[j] = cal(s);
        }
        int id1 = 0, id2 = 0;
        for (int j = 0; j < m1; j++) id1 = id1 * 3 + a[j];
        for (int j = 0; j < m2; j++) id2 = id2 * 3 + a[m1 + j];
        Node R;
        R.id1 = id1;
        R.id2 = id2;
        R.p = p;
        for (int j = 0; j < m1; j++) R.vec1.push_back(a[j]);
        for (int j = 0; j < m2; j++) R.vec2.push_back(a[m1 + j]);
        vec.push_back(R);
    }
    sort(vec.begin(), vec.end(), [&](Node x, Node y) {
        if (x.id1 != y.id1) return x.id1 < y.id1;
        return x.id2 < y.id2;
    });
    vector<Node> G;
    for (int i = 0; i < n;) {
        int j = i;
        double sum = vec[i].p;
        while (j + 1 < n && vec[j + 1].id1 == vec[i].id1 && vec[j + 1].id2 == vec[i].id2) sum += vec[++j].p;
        Node R;
        R.id1 = vec[i].id1;
        R.id2 = vec[i].id2;
        R.p = sum;
        R.vec1 = vec[i].vec1;
        R.vec2 = vec[i].vec2;
        G.push_back(R);
        i = j + 1;
    }
    int tr1 = 1, tr2 = 1;
    for (int i = 0; i < m1; i++) tr1 *= 3;
    for (int i = 0; i < m2; i++) tr2 *= 3;
    vector<vector<char>> matrix1(tr1, vector<char>(m1)), matrix2(tr2, vector<char>(m2));
    for (int k = 0; k < tr1; k++) {
        int t = k;
        for (int j = m1 - 1; j >= 0; j--) {
            matrix1[k][j] = t % 3;
            t /= 3;
        }
    }
    for (int k = 0; k < tr2; k++) {
        int t = k;
        for (int j = m2 - 1; j >= 0; j--) {
            matrix2[k][j] = t % 3;
            t /= 3;
        }
    }
    vector<vector<double>> A(tr1, vector<double>(2 * m1 + 1, 0));
    for (int k1 = 0; k1 < tr1; k1++) {
        for (int i = 0; i < (int)G.size(); i++) {
            int sum = 0;
            for (int j = 0; j < m1; j++) {
                int x = matrix1[k1][j], y = G[i].vec1[j];
                if (x != y) sum += D[x][y] ? +1 : -1;
            }
            A[k1][sum + m1] += G[i].p;
        }
    }
    vector<vector<double>> B(tr2, vector<double>(2 * m2 + 1, 0));
    vector<vector<double>> P(tr2, vector<double>(2 * m2 + 2, 0));
    for (int k2 = 0; k2 < tr2; k2++) {
        for (int i = 0; i < (int)G.size(); i++) {
            int sum = 0;
            for (int j = 0; j < m2; j++) {
                int x = matrix2[k2][j], y = G[i].vec2[j];
                if (x != y) sum += D[x][y] ? +1 : -1;
            }
            B[k2][sum + m2] += G[i].p;
        }
        for (int u = 2 * m2; u >= 0; u--) P[k2][u] = B[k2][u] + P[k2][u + 1];
    }
    double res = -1.0;
    int bk1 = 0, bk2 = 0;
    for (int k1 = 0; k1 < tr1; k1++) {
        for (int k2 = 0; k2 < tr2; k2++) {
            double val = 0;
            for (int h = 0; h <= 2 * m1; h++) val += A[k1][h] * P[k2][m - h];
            if (val > res + 1e-15) {
                res = val;
                bk1 = k1;
                bk2 = k2;
            }
        }
    }
    printf("%.6lf\n", res);
    string ss[3] = {"rock", "paper", "scissors"};
    for (int j = 0; j < m1; j++) cout << ss[matrix1[bk1][j]] << " ";
    for (int j = 0; j < m2; j++) cout << ss[matrix2[bk2][j]] << " ";
    cout << "\n";
    return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 0
Wrong Answer
time: 12ms
memory: 3712kb

input:

841 5
0.002262 paper rock rock scissors scissors
0.000665 rock paper paper scissors paper
0.001132 s...

output:

0.672778
paper paper rock scissors paper 

result:

wrong answer 1st words differ - expected: '0.689135', found: '0.672778'

Test #2:

score: 10
Accepted
time: 3ms
memory: 3604kb

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: 0ms
memory: 3632kb

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
Time Limit Exceeded

input:

100000 12
0.000008 rock rock rock scissors paper scissors paper paper paper scissors paper scissors
...

output:


result:


Test #5:

score: 0
Wrong Answer
time: 1911ms
memory: 18292kb

input:

82918 11
0.000009 paper rock rock scissors scissors paper rock paper rock rock paper
0.000000 scisso...

output:

0.581083
paper rock paper paper paper scissors rock rock scissors scissors rock 

result:

wrong answer 1st words differ - expected: '0.582727', found: '0.581083'

Test #6:

score: 0
Wrong Answer
time: 799ms
memory: 12212kb

input:

63157 10
0.000004 rock scissors paper scissors paper scissors rock paper rock scissors
0.000007 rock...

output:

0.584571
rock scissors rock paper rock scissors rock scissors rock paper 

result:

wrong answer 1st words differ - expected: '0.587712', found: '0.584571'

Test #7:

score: 0
Time Limit Exceeded

input:

100000 12
0.000003 rock rock rock paper paper rock paper paper paper rock rock scissors
0.000001 pap...

output:


result:


Test #8:

score: 0
Wrong Answer
time: 1747ms
memory: 12752kb

input:

72055 11
0.000006 rock scissors scissors rock scissors scissors scissors scissors rock scissors scis...

output:

0.580789
scissors rock paper rock rock rock paper scissors scissors rock scissors 

result:

wrong answer 1st words differ - expected: '0.584229', found: '0.580789'

Test #9:

score: 0
Wrong Answer
time: 1743ms
memory: 10708kb

input:

49463 12
0.000024 rock paper scissors paper rock scissors rock paper paper paper paper paper
0.00000...

output:

0.581145
rock paper rock scissors paper scissors rock rock paper paper rock paper 

result:

wrong answer 1st words differ - expected: '0.584658', found: '0.581145'

Test #10:

score: 0
Time Limit Exceeded

input:

100000 12
0.000007 rock paper scissors paper paper scissors rock rock scissors rock scissors paper
0...

output:


result: