Logo Wy Online Judge

WyOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#316#6. 「WyOJ Round 1」持 · 山海为肩cxm10241004677ms20600kbC++232.2kb2025-04-18 17:36:342025-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