题解中 ai 的表,左面是分子,右面是分母,从上到下是 i = 0 ~ n 的分数表示。
Ans 2:
1 1
0 1
0 1
Ans 3:
-11 18
1 1
-1 2
1 9
Ans 4:
35 144
-13 18
19 24
-7 18
11 144
Ans 5:
-17 240
71 240
-59 120
49 120
-41 240
7 240
Ans 6:
7 432
-31 360
137 720
-121 540
107 720
-19 360
17 2160
Ans 7:
-23 7560
59 3024
-3 56
247 3024
-113 1512
23 560
-19 1512
5 3024
Ans 8:
13 26880
-73 20160
239 20160
-149 6720
209 8064
-391 20160
61 6720
-7 2880
23 80640
Ans 9:
-29 435456
59 103680
-7 3240
31 6480
-353 51840
67 10368
-53 12960
151 90720
-41 103680
13 311040
Ans 10:
11 1360800
-211 2721600
607 1814400
-97 113400
31 21600
-107 64800
19 14400
-41 56700
59 226800
-151 2721600
29 5443200
由 望月 Asta 编写的 checker:
#include <cstdio>
#include <cstdlib>
typedef long long ll;
ll val[5005];
ll MOD;
int d;
inline ll mul(ll a,ll b) {
ll res = 0;
for(;b;b >>= 1) {
if(b & 1) res = (res + a) % MOD;
a = (a + a) % MOD;
}
return res;
}
inline ll qpow(ll a,ll b) {
ll res = 1;
for(;b;b >>= 1) {
if(b & 1) res = res * a % MOD;
a = a * a % MOD;
}
return res;
}
char s[10];
inline void WrongAnswer(const char *s) {
puts("Wrong Asnwer");
puts(s),exit(0);
}
int main() {
freopen("foo.txt","r",stdin);
for(int i = 1;i <= 5000;++i)
val[i] = 1;
printf("remember to set x,y,d,p\n");
val[1] = 12,val[2] = 13;
d = 10,MOD = 998244353;
ll res = mul(val[1],val[2]);
int x,y,z,cnt = 0;
while(~scanf("%s",s + 1)) {
if(s[1] == '+') {
scanf("%d %d %d",&x,&y,&z);
if(x < 1 || x > 5000 || y < 1 || y > 5000 || z < 1 || z > 5000)
WrongAnswer("Invalid Memory Use");
val[z] = (val[x] + val[y]) % MOD;
}
else if(s[1] == '^') {
scanf("%d %d",&x,&y);
if(x < 1 || x > 5000 || y < 1 || y > 5000)
WrongAnswer("Invalid Memory Use");
val[y] = qpow(val[x],d);
}
else if(s[1] == 'f') {
scanf("%d",&x);
if(x < 1 || x > 5000) WrongAnswer("Invalid Memory Use");
else if(val[x] == res) {
puts("Accepted");
return 0;
}
else WrongAnswer("Not Corret Number");
}
if(++cnt == 4999)
WrongAnswer("Too much steps");
}
WrongAnswer("A Sudden End With No Result");
return 0;
}