QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#580895 | #9376. Game | SFpro | WA | 78ms | 3648kb | C++20 | 2.4kb | 2024-09-22 00:44:23 | 2024-09-22 00:44:26 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int MOD = 998244353;
int power(int a, int b, int p) {// a^ b % p
int res = 1;
for (; b; b /= 2, a = a * a % p) {
if (b % 2 == 1) {
res = res * a % p;
}
}
return res;
}
void read() {
int x, y;
cin >> x >> y;
int a0, a1, b;
cin >> a0 >> a1 >> b;
int ans = 0;
if(x == y) {
ans = a0 % MOD * power(a1 + a0, MOD - 2, MOD) % MOD;
cout << ans << endl;
} else {
int num1 = 0, num2 = 0, i = 0, temp = 1, res = a0 * power(a0 + a1, MOD - 2, MOD) % MOD; //temp:到目前情况的概率,res:单回合胜的概率
while(y != 0 && x != 0 && y != x) {
if(y >= x) {//y>=x时,只许胜不许败
num1 = y % x == 0 ? y / x - 1 : y / x;
y %= x;
// int q = (power(a0 + a1, num1, MOD) - a0 * power(a0 + a1, num1 - 1, MOD) + MOD) % MOD;//等比数列求和的分母
// q = power(q, MOD - 2, MOD);//逆元
// int u = (power(a0 + a1, num1, MOD) - power(a0, num1, MOD) + MOD) % MOD;//1-q的num1次方
// ans += res * temp % MOD * a0 % MOD * power(a0 + a1, num1 - 1, MOD) % MOD * u % MOD * q % MOD;
temp = temp * power(a0, num1, MOD) % MOD * power(power(a0 + a1, num1, MOD), MOD - 2, MOD) % MOD;
ans += res * temp % MOD;
} else {//可败,败了影响概率,等比数列求和
num2 = x % y == 0 ? x / y - 1 : x / y;
x %= y;
//cout<<temp<<" "<<num2<<endl;
int q = (power(a0 + a1, num2 + 1, MOD) - a1 * power(a0 + a1, num2, MOD) + MOD) % MOD; //分母
q = power(q, MOD - 2, MOD);
int u = (power(a0 + a1, num2, MOD) - power(a1, num2, MOD) + MOD) % MOD;
ans += res * temp % MOD * a1 % MOD * u % MOD * q % MOD;
temp = temp * power(a1, num2, MOD) % MOD * power(power(a0 + a1, num2, MOD), MOD - 2, MOD) % MOD;
}
ans %= MOD;
}
cout << ans << endl;
// cout<<(7*power(10,MOD-2,MOD)%MOD)<<endl;
}
}
signed main() {
ios::sync_with_stdio(false), cout.tie(0), cin.tie(0);
int t = 1;
cin >> t;
while(t--) {
read();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3636kb
input:
3 1 1 2 2 6 1 3 2 3 6 3 4 7 3 15
output:
499122177 910398850 220911476
result:
ok 3 lines
Test #2:
score: -100
Wrong Answer
time: 78ms
memory: 3648kb
input:
100000 1 1000000000 12980050 128257807 266126484 1 1000000000 400255084 123438563 768881284 1000000000 1000000000 24563487 72082135 450057094 1 1000000000 56952077 40876000 193815114 1000000000 1000000000 82048274 239365585 326520865 1000000000 1 309821265 346013425 963168258 1 1 104158269 199365020...
output:
947058399 376449942 612621163 138416357 592200562 -140436017 870227707 169499045 -13220528 415694940 -724632828 951368934 426243016 864656779 750317399 -794310820 486881524 824329239 198191519 189360084 966510181 512645443 695650039 -819690390 550002158 -583666597 246877045 39876086 667870434 405196...
result:
wrong answer 6th lines differ - expected: '45779380', found: '-140436017'