cf补题
C
数学题
一开始是模拟进制转换,发现c++的精度不够,然后就用python写了一发,T。
最后列出来一个式子:\(\frac{b^x·p}{q}\),若能整除,则为可以有限表示的数字。
然而,还是没有想到特例,gcd在除的时候会发生变化。
最后记得一定要关同步
ac code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include <bits/stdc++.h> using namespace std; typedef long long ll; int main(){ int n; ios::sync_with_stdio(false); cin>>n; ll p, q; ll b; while(n--){ cin>>p>>q>>b; ll num = p/q; p -= num*q; ll com = __gcd(p, q); p /= com; q /= com; bool flag = false; ll gc = __gcd(q, b); if(p == 0){ flag = true; } else{ while(q%gc == 0&&gc!=1){ q /= gc; gc = __gcd(q, gc); } if(q!=1){ flag = false; } else flag = true; } if(!flag){ printf("Infinite\n"); } else { printf("Finite\n"); } } return 0; }
|
D
dp, 有点st表的感觉。
注意答案数组和记录数组的区别
ac code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 5e3+10; ll num[maxn]; ll dp[maxn][maxn]; ll mem[maxn][maxn]; int n; int main(){ ios::sync_with_stdio(false); cin>>n; for(int i=1; i<=n; i++){ cin>>num[i]; dp[i][i] = num[i]; mem[i][i] = num[i]; } for(int l=2; l<=n; l++){ for(int i=1; i+l-1<=n; i++){ dp[i][i+l-1] = max(mem[i][i+l-2]^mem[i+1][i+l-1], max(dp[i][i+l-2], dp[i+1][i+l-1])); mem[i][i+l-1] = mem[i][i+l-2]^mem[i+1][i+l-1]; } } int q; cin>>q; int ll, rr; for(int i=0; i<q; i++){ cin>>ll>>rr; cout<<dp[ll][rr]<<endl; } return 0; }
|
未解决的问题