QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#584804 | #9376. Game | yywxdgy | TL | 0ms | 3812kb | C++14 | 1.3kb | 2024-09-23 16:50:16 | 2024-09-23 16:50:17 |
Judging History
answer
#include <iostream>
#include <cstdio>
#include <string.h>
const int mod = 998244353;
using namespace std;
#define gc() getchar()
inline int read() {
char c = gc(); int s = 0;
for (; !isdigit(c); c = gc());
for (; isdigit(c); c = gc()) s = s * 10 + c - 48;
return s;
}
inline int mul(int a, int b) { return 1ll*a*b%mod; }
inline int add(int a, int b) { return a + b >= mod ? a + b - mod : a + b; }
int Power(int a, int b) {
int ans = 1;
for (; b; b >>= 1) (b & 1 ? ans = mul(ans, a) : 0), a = mul(a, a);
return ans;
}
int a1, a2, b, P, Q;
int X, Y;
int fun(int x, int y) {
if (x == y) return P;
if (x == 1) return Power(P, y);
if (x < y) return mul(Power(P, (y - 1) / x), fun(x, y - (y - 1) / x * x));
int a = x / y, sum = 0;
for (int i = 0; i < a; ++i) sum = add(sum, Power(Q, i));
sum = mul(P, sum);
if (y == 1) return sum;
return mul(sum, mul(Power(Q, a), fun(x - x / y * y, y)));
}
void Work() {
X = read(), Y = read();
a1 = read(), a2 = read(), b = read();
P = mul(a1, Power(add(a1,a2), mod - 2));
Q = mul(a2, Power(add(a1,a2), mod - 2));
printf("%d\n", fun(X, Y));
}
int main() {
int T; cin >> T;
while (T --) Work();
return 0;
}
/*
3
1 1
2 2 6
1 3
2 3 6
3 4
7 3 15
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3812kb
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
Time Limit Exceeded
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...