2020 China Collegiate Programming Contest Weihai Site
A Golden Spirit
#include<bits/stdc++.h>#define int llusingnamespace std;typedeflonglong ll;constint maxn =1e5+10;constint mod =998244353;voidsolve(){
ll n, x, t;
cin >> n >> x >> t;
ll ans =4* n * t;
ll res =2* n * t + t;if(x >2*(n -1)* t){if(res - t < x) res = t + x -2* n * t;else res = t;
ans +=min(res, x -2*(n -1)* t);}
cout << ans <<'\n';}signedmain(){//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _ =1;
cin >> _;while(_--)solve();return0;}
D ABC Conjecture
#include<bits/stdc++.h>usingnamespace std;typedeflonglong ll;typedeflonglong LL;
map<ll, ll> mmp;
ll n, Max =0;inline ll mul(ll a, ll b, ll mod){
ll d =(longdouble) a / mod * b +1e-8;//还必须是long double……double精度不够
ll r = a * b - d * mod;return r <0? r + mod : r;}inline ll quickpow(ll a, ll b, ll mod){
ll ret =1;for(; b; b >>=1, a =mul(a, a, mod))if(b &1) ret =mul(ret, a, mod);return ret;}inlinebooltest(ll a, ll d, ll n){
ll t =quickpow(a, d, n);if(t ==1)return1;while(d != n -1&& t != n -1&& t !=1) t =mul(t, t, n), d <<=1;return t == n -1;//这里就不用判1了,因为只可能在while前出现1的情况}int a[]={2,3,5,7,11};inlineboolmiller_rabin(ll n){if(n ==1)return0;for(int i =0; i <5;++i)//先粗筛一遍{if(n == a[i])return1;if(!(n % a[i]))return0;}
ll d = n -1;while(!(d &1)) d >>=1;for(int i =1; i <=5;++i)//搞五遍{
ll a =rand()%(n -2)+2;//x属于[2, n - 1]if(!test(a, d, n))return0;}return1;}inline ll gcd(ll a, ll b){return b ?gcd(b, a % b): a;}inline ll f(ll x, ll a, ll mod){return(mul(x, x, mod)+ a)% mod;}constint M =(1<<7)-1;//我也不知道为啥M是这个数……
ll pollard_rho(ll n)//倍增版!减少gcd调用次数。(好像不用判环?){for(int i =0; i <5;++i)if(n % a[i]==0)return a[i];
ll x =rand(), y = x, t =1, a =rand()%(n -2)+2;for(int k =2;; k <<=1, y = x){
ll q =1;for(int i =1; i <= k;++i){
x =f(x, a, n);
q =mul(q,abs(x - y), n);// if(i >= M) //不等价!if(!(i & M))//超过了2 ^ 7,再用gcd{
t =gcd(q, n);if(t >1)break;//找到了}}if(t >1||(t =gcd(q, n))>1)break;//之所以再求一遍,是处理刚开始k < M的情况}return t;}
LL factor[100], total =0;inlinevoidfind(ll x){if(x ==1|| x <= Max)return;if(miller_rabin(x)){
factor[++total]= x;return;}
ll p = x;while(p == x) p =pollard_rho(x);//while (x % p == 0) x /= p;find(p);find(x/p);}intmain(){longlong n, m, i, t;scanf("%lld",&t);while(t--){
mmp.clear();scanf("%lld",&n);if(miller_rabin(n)|| n ==1){printf("no\n");}else{memset(factor,0,sizeof(factor));
total =0;find(n);sort(factor +1, factor + total +1);bool flag =1;for(longlong i =1; i <= total; i++){
mmp[factor[i]]++;if(mmp[factor[i]]>=2){
flag =0;
cout <<"yes"<< endl;break;}}if(flag ==1){
cout <<"no"<< endl;}}}return0;}
H Message Bomb
#include<bits/stdc++.h>#define int llusingnamespace std;typedeflonglong ll;constint maxn =2e5+10;constint mod =998244353;
map<int,int>mp[maxn];int b[maxn];int a[maxn];voidsolve(){int n,m,s;
cin>>n>>m>>s;for(int i =1; i <=s;++i){int t,x,y;
cin>>t>>x>>y;if(t==1) mp[x][y]-=b[y];if(t==2) a[x]+=b[y]+mp[x][y],mp[x].erase(y);if(t==3) a[x]--,b[y]++;}for(int i =1; i <=m;++i)for(auto x:mp[i])
a[i]+=b[x.first]+x.second;for(int i =1; i <=m;++i)
cout<<a[i]<<"\n";}signedmain(){//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _ =1;//cin >> _;while(_--)solve();return0;}
L Clock Master
#include<bits/stdc++.h>#define int llusingnamespace std;typedeflonglong ll;constint maxn =3e4+10;constint mod =998244353;double dp[maxn], w[maxn];int vis[maxn], pri[maxn];int cnt =0;voidprime(){for(int i =2; i < maxn;++i){if(!vis[i]) pri[++cnt]= i, vis[i]=1;for(int j = i; j <= maxn / i; j++)
vis[i * j]=1;}}voiddoshit(){for(int i =1; i < maxn; i++) w[i]=log(i);for(int i =1; i <= cnt;++i)for(int j = maxn -1; j >= pri[i];--j)for(int k = pri[i]; k <= j; k *= pri[i])if(j >= k) dp[j]=max(dp[j], dp[j - k]+ w[k]);}voidsolve(){int n;
cin >> n;printf("%.10f\n", dp[n]);}signedmain(){//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _ =1;
cin >> _;prime();doshit();while(_--){solve();}return0;}