2020 China Collegiate Programming Contest Weihai Site补题部分

A. Golden Spirit

签到题,首先把所有老人带到对岸,然后在对休息讨论一下即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int main()
{IO;int T=1;cin>>T;while(T--){ll n,x,t;cin>>n>>x>>t;ll p=2*n*t;if(p-2*t>=x) cout<<2*p<<'\n';else{ll w=x-p+2*t;if(w>=t) {p+=t;cout<<2*n*t+p+max(0ll,x-2*n*t)<<'\n';}elsecout<<2*p+w<<'\n';}}return 0;
}

C. Rencontre

大佬题解

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
//#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=200010;
int n,m;
int h[N],e[2*N],ne[2*N],idx;
ll w[2*N];
int sz[N];
int can[N][4];
int cnt[4];
void add(int a,int b,ll c)
{e[idx]=b;w[idx]=c;ne[idx]=h[a];h[a]=idx++;
}
ll res1,res2,res3;
void dfs(int u,int fa)
{for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(j==fa) continue;dfs(j,u);for(int k=1;k<=3;k++) can[u][k]+=can[j][k];res1+=w[i]*can[j][1]*(cnt[2]-can[j][2])+w[i]*can[j][2]*(cnt[1]-can[j][1]);res2+=w[i]*can[j][2]*(cnt[3]-can[j][3])+w[i]*can[j][3]*(cnt[2]-can[j][2]);res3+=w[i]*can[j][3]*(cnt[1]-can[j][1])+w[i]*can[j][1]*(cnt[3]-can[j][3]);}
}int main()
{IO;int T=1;//cin>>T;while(T--){memset(h,-1,sizeof h);cin>>n;for(int i=1;i<n;i++){int a,b;ll c;cin>>a>>b>>c;add(a,b,c),add(b,a,c);}for(int i=1;i<=3;i++){cin>>cnt[i];for(int j=1;j<=cnt[i];j++){int x;cin>>x;can[x][i]=1;}}dfs(1,-1);double d1=(double)res1/((double)cnt[1]*cnt[2]);double d2=(double)res2/((double)cnt[3]*cnt[2]);double d3=(double)res3/((double)cnt[1]*cnt[3]);double ans=(d1+d2+d3)/2;printf("%.9lf\n",ans);}return 0;
}

自己非常害怕树的问题,尤其是树形dp之类的
总结:像这种考虑贡献的可以尝试逐点考虑或者逐边考虑(本题)

D. ABC Conjecture

c=p1α1p2α2…pkαkc=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k}c=p1α1p2α2pkαk
只要存在αi>1\alpha_i>1αi>1就能够满足题意,如下尝试构造一组ababab,不妨设αi>1\alpha_i>1αi>1
a=p1α1…(piαi−1)…p1α1a=p_1^{\alpha_1}\dots (p_i^{\alpha_i-1})\dots p_1^{\alpha_1}a=p1α1(piαi1)p1α1
b=p1α1…[(pi−1)×piαi−1]…p1α1b=p_1^{\alpha_1}\dots [(p_i-1)×p_i^{\alpha_i-1}]\dots p_1^{\alpha_1}b=p1α1[(pi1)×piαi1]p1α1
明显上述a+b=ca+b=ca+b=c,且由于pi−1<pip_i-1<p_ipi1<pi脑补一下rad(abc)<crad(abc)<crad(abc)<c一定成立

由于c范围很大,如果你只会线性筛只需要先线性筛质数,然后试除法分解质因数,但是可能分解不彻底,对于分解之后剩下的部分只需要特判一下(由于(107)3>1018(10^7)^3>10^{18}(107)3>1018),如果存在大于10710^7107的质因数,该质因数的次幂最大是2。由此可特判

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=10000010;
int cnt,prime[N];
bool st[N];
void init(int n)
{for(int i=2;i<=n;i++){if(!st[i]) prime[++cnt]=i;for(int j=1;prime[j]<=n/i;j++){st[i*prime[j]]=1;if(i%prime[j]==0) break;}}
}
int main()
{IO;int T=1;cin>>T;init(10000000);while(T--){ll c;cin>>c;bool ok=0;for(int i=1;i<=cnt;i++){ll p=prime[i];int s=0;if(c%p==0){while(c%p==0)c/=p,s++;}if(s>=2) ok=1;}ll x=sqrt(c);if(c>1&&1ll*x*x==c) ok=1;if(ok) cout<<"yes\n";else cout<<"no\n";}return 0;
}

如果没想到上述特判方法那么需要更快速的方法分解质因数,Pollard’s rho模板题?我想可能出题人本意不是这个,会的越多就能越暴力解决问题,降低思维难度!!!

总结:做题还是需要多想想,而且要相信对于自己现在的掌握的算法已经足够解决一些题目。

G. Caesar Cipher

线段树+hash
看到这个题想到hash了,不过由于hash需要取模而且题目中也需要取模自己就非常乱,根本不明白什么时候取哪个模😵

看到正解后发现非常巧妙,由于每次只进行+1,而且对于65536取模,最终可以知道q次询问后溢出数的总个数不会很多,由此每次进行区间+1后我们check一下是否有溢出的数,如果有直接单点修改即可,只需要多维护一个区间最大值mx。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=500010,P=131;
const int mod1=1e9+7;
const int mod2=65536;
struct node
{int l,r;ll lazy;ll hs,mx;
}tree[N<<2];
ll p[N],one[N];
int n,q;
void pushup(int u)
{int len=tree[u<<1|1].r-tree[u<<1|1].l+1;tree[u].hs=(tree[u<<1].hs*p[len]%mod1+tree[u<<1|1].hs)%mod1;tree[u].mx=max(tree[u<<1].mx,tree[u<<1|1].mx);
}
void build(int u,int l,int r)
{tree[u]={l,r,0};if(l==r){cin>>tree[u].hs;tree[u].mx=tree[u].hs;return;}int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);pushup(u);
}
void pushdown(int u)
{if(tree[u].lazy==0) return;int lenl=tree[u<<1].r-tree[u<<1].l+1;int lenr=tree[u<<1|1].r-tree[u<<1|1].l+1;tree[u<<1].hs=(tree[u<<1].hs+tree[u].lazy*one[lenl]%mod1)%mod1;tree[u<<1|1].hs=(tree[u<<1|1].hs+tree[u].lazy*one[lenr]%mod1)%mod1;tree[u<<1].mx+=tree[u].lazy;tree[u<<1|1].mx+=tree[u].lazy;tree[u<<1].lazy+=tree[u].lazy;tree[u<<1|1].lazy+=tree[u].lazy;tree[u].lazy=0;
}
void add(int u,int l,int r)
{if(l<=tree[u].l&&tree[u].r<=r){tree[u].lazy++;tree[u].mx++;int len=tree[u].r-tree[u].l+1;tree[u].hs=(tree[u].hs+one[len])%mod1;return;}pushdown(u);int mid=tree[u].l+tree[u].r>>1;if(l<=mid) add(u<<1,l,r);if(r>mid) add(u<<1|1,l,r);pushup(u);
}
ll query(int u,int l,int r)
{if(l<=tree[u].l&&tree[u].r<=r) return tree[u].hs;pushdown(u);int mid=tree[u].r+tree[u].l>>1;ll v=0;if(r<=mid) v=query(u<<1,l,r);else if(l>mid) v=query(u<<1|1,l,r);elsev=(query(u<<1,l,mid)*p[r-mid]%mod1+query(u<<1|1,mid+1,r))%mod1;return v;
}
void check(int u)
{if(tree[u].mx<mod2) return;if(tree[u].l==tree[u].r) {tree[u].mx-=mod2;tree[u].hs-=mod2;return;}pushdown(u);if(tree[u<<1].mx>=mod2) check(u<<1);if(tree[u<<1|1].mx>=mod2) check(u<<1|1);pushup(u);
}
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n>>q;p[0]=1;for(int i=1;i<=n;i++) p[i]=p[i-1]*P%mod1,one[i]=(one[i-1]*P%mod1+1)%mod1;build(1,1,n);while(q--){int op,l,r;cin>>op>>l>>r;if(op==1) {add(1,l,r);check(1);}else{int len;cin>>len;if(query(1,l,l+len-1)==query(1,r,r+len-1)) cout<<"yes\n";else cout<<"no\n";}}}return 0;
}

H. Message Bomb

大佬题解
cnticnt_icnti当前群消息个数,ansians_iansiiii个人收到消息个数,用一个set记录当前某人所在的群聊。
差分的思想:一个人加入群聊时减去该群聊之前的消息数,退出群聊时加上该群聊当前的消息数,最后加上未退出的群聊消息数

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
//#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=200010;
int n,m,s;
int cnt[N];
int ans[N];
set<int> g[N];
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n>>m>>s;while(s--){int op,x,y;cin>>op>>x>>y;if(op==1){g[x].insert(y);ans[x]-=cnt[y];}else if(op==2){g[x].erase(y);ans[x]+=cnt[y];}else{cnt[y]++;ans[x]--;}}for(int i=1;i<=m;i++) {for(auto t:g[i])ans[i]+=cnt[t];cout<<ans[i]<<'\n';}}return 0;
}

L. Clock Master

筛素数+分组背包
#include<cmath>中的log()用不得!!!

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=30010;
double f[N];
int prime[N],cnt;
bool st[N];
double lg[N];
void init(int n)
{for(int i=2;i<=n;i++){if(!st[i]) prime[++cnt]=i;for(int j=1;prime[j]<=n/i;j++){st[prime[j]*i]=1;if(i%prime[j]==0) break;}}
}
int main()
{IO;int T=1;cin>>T;init(30000);for(int i=1;i<=30000;i++) lg[i]=log(i);for(int i=1;i<=cnt;i++){for(int j=30000;j>=0;j--){ll v=1;for(int k=1;;k++){v=v*prime[i];if(v>j) break;f[j]=max(f[j],f[j-v]+k*lg[prime[i]]);}}}while(T--){int b;cin>>b;printf("%.7lf\n",f[b]);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P5110-块速递推【特征方程,分块】

正题 题目链接:https://www.luogu.com.cn/problem/P5110 题目大意 数列aaa满足 an233an−1666an−2,a00,a11a_n233a_{n-1}666a_{n-2},a_00,a_11an​233an−1​666an−2​,a0​0,a1​1 TTT组询问给出nnn求ana_nan​ 1≤T≤51071\leq T\leq 5\times 10^71≤T≤5107&#xff0c;…

I - Washing clothes

题意&#xff1a; 有n个人会在某时间段来洗衣服&#xff0c;但是只有一台洗衣机&#xff0c;当洗衣机被用时其他人只能手洗&#xff0c;手洗时间为y&#xff08;题目给定&#xff09;&#xff0c;洗衣机的时间为x&#xff0c;x∈[1,y]&#xff0c;问当x分别为[1,y]时&#xff…

【LCT】历史(P4338)

正题 P4338 题目大意 有一棵树&#xff0c;告诉你每个点access的次数&#xff08;带修改&#xff09;&#xff0c;问实链切换的最多次数 解题思路 先考虑离线的做法&#xff1a; 对于点 x&#xff0c;其不同儿子的子树access会使实链切换&#xff08;对于点 x access 同理&…

微软官宣:史上最贵开发工具 75亿美金收购GitHub

微软副总裁红衣主教Scott Gu今天的一封邮件结束了这笔软件历史上最大收购案&#xff0c;微软给全球开发人员的开源代码仓库GitHub投入了75亿美金&#xff0c;确保这一平台的持续健康发展。GitHub为啥愿意被收购&#xff1f;“软件工程这个事情&#xff0c;从来就不是一笔好生意…

codeforces1438 E.Yurii Can Do Everything

E.Yurii Can Do Everything 官方题解 按照题解的意思&#xff0c;由于满足此条件的数量不多&#xff0c;因此可以挖掘某些信息进行暴力。 考虑一个good subarray&#xff1a;[al,al1,…,ar−1,ar][a_l,a_{l1},\dots,a_{r-1},a_r][al​,al1​,…,ar−1​,ar​] 按照题目意思满…

YbtOJ#791-子集最值【三维偏序】

正题 题目链接:http://www.ybtoj.com.cn/contest/123/problem/1 题目大意 给出333个长度为nnn的排列A,B,CA,B,CA,B,C。然后一个下标集合SSS的三元组是 (max{Ai},max{Bi},max{Ci})(i∈S)(max\{A_i\},max\{B_i\},max\{C_i\})(i\in S)(max{Ai​},max{Bi​},max{Ci​})(i∈S) 求…

【主席树】更为厉害(P3899)

正题 P3899 题目大意 给你一棵树&#xff0c;对于每次询问&#xff0c;给出x,k&#xff0c;问你有多少个三元组(y,z)满足x,y,z不同&#xff0c;x,y之间的距离小于k&#xff0c;且x,y都是z的祖先 解题思路 若y的深度小于x&#xff0c;那么一定在x到根节点的路径上&#xff0c…

人工智能——图像分析第二期练习

又和同学肝了半个上午&#xff08;主要是一二节有课&#xff09;&#xff0c;完成了天气图像识别的第二期练习 一开始几个题不难&#xff0c;挺简单的&#xff0c;到后面出现HOG特征拟合svm模型&#xff0c;HOG提取特征&#xff0c;又是现学内容 HOG特征的维数用cv2.HOGDescrip…

C# 中使用面向切面编程(AOP)中实践代码整洁

1. 前言最近在看《架构整洁之道》一书&#xff0c;书中反复提到了面向对象编程的 SOLID 原则&#xff08;在作者的前一本书《代码整洁之道》也是被大力阐释&#xff09;&#xff0c;而面向切面编程&#xff08;Aop&#xff09;作为面向对象编程的有力补充&#xff0c;对实践整洁…

AtCoder Beginner Contest 183 总结

本来懒得写了&#xff0c;不过第一次AK还是记录一下吧 A - ReLU ABC的签到题就是友好 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<stack> #inc…

【数论】ZAP-Queries(P3455)

正题 P3455 题目大意 有T组询问&#xff0c;每组询问给出n,m,c&#xff0c;求∑i1n∑j1m[(i,j)c]\sum_{i1}^{n}\sum_{j1}^{m}[(i,j)c]i1∑n​j1∑m​[(i,j)c] 解题思路 可以先对n,m除c这样就使得求出的数都有c的因子&#xff0c;得到式子如下 ∑i1n∑j1m[(i,j)1]∑i1n∑j1m∑…

AT4518-[AGC032C]Three Circuits【欧拉回路】

正题 题目链接:https://www.luogu.com.cn/problem/AT4518 题目大意 给出nnn个点mmm条边的一张简单无向联通图&#xff0c;求能否把它分成三个可重复点的环。 1≤n,m≤1051\leq n,m\leq 10^51≤n,m≤105 解题思路 相当于你要去掉图上的两个环后依旧有欧拉回路 首先原本肯定得…

ABB (2020牛客国庆集训派对day1)

ABB 题意&#xff1a; 长度为n的字符串&#xff0c;问最少添加多少字符可以使其构成回文字符串 题解&#xff1a; 最长回文字符串我的第一反应是manacher马拉车算法&#xff0c;那我们直接马拉车找到已有最长回文串&#xff0c;然后总长度减去不就是答案吗&#xff1f;非也…

微软对开发者献真爱,全面支持开源,加速研发云升级

全球首秀&#xff1a;支持 Java 和 Python 的 Visual Studio Live Share 协作服务与 IntelliCode 人工智能辅助编程&#xff0c;适用于物联网和智能边缘的自动机器学习能力&#xff08;Auto ML&#xff09;&#xff1b;Visual Studio App Center 提供一站式跨平台移动应用开发体…

Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final)

今天看不下去数电vp一场div2&#xff0c;搞A搞了很长时间&#xff0c;导致后面没有时间写&#xff0c;不过今天补题的时候全是独立补出来的没有看题解 vp3题&#xff0c;补3题 A - Kids Seating 最开始想的是与质数有关&#xff0c;乱七八糟搞了半天&#xff0c;结果最后回头…

【数论】GCD(P2568)

正题 P2568 题目大意 求满足1≤x,y≤n1\leq x,y\leq n1≤x,y≤n且gcd(x,y)primegcd(x,y)primegcd(x,y)prime的数对(x,y)(x,y)(x,y)的个数 解题思路 题目即求 ∑i1n∑j1n[gcd(i,j)prime]\sum_{i1}^n\sum_{j1}^n[gcd(i,j)prime]i1∑n​j1∑n​[gcd(i,j)prime] 可以考虑先枚举…

AT4502-[AGC029C]Lexicographic constraints【二分,栈】

正题 题目链接:https://www.luogu.com.cn/problem/AT4502 题目大意 给出nnn个长度SSS&#xff0c;求一个最小mmm表示用大小为mmm的字符集构造出nnn个符合对应长度的字符串使得字符串按照给出顺序从小到大。 1≤n≤2105,1≤Si≤1091\leq n\leq 2\times 10^5,1\leq S_i\leq 10^…

2020牛客国庆集训派对day1 C. Bob in Wonderland

Bob in Wonderland 题意&#xff1a; 一棵树&#xff0c;问最少移动多少次边可以使其变成一个链&#xff1f; 移动是指&#xff1a;从原位置拆下并连到新位置&#xff0c;这样算一次 题解&#xff1a; 错误思路 我一开始在想既然求最少移动次数&#xff0c;那我们就尽可能…

Ocelot简易教程(七)之配置文件数据库存储插件源码解析

上篇文章Ocelot简易教程&#xff08;六&#xff09;之重写配置文件存储方式并优化响应数据 给大家分享了如何集成我写的一个Ocelot扩展插件把Ocelot的配置存储到数据库中。并没有对实现原理进行相应的阐述。今天抽空把实现的原理给大家说道说道。明白原理后&#xff0c;大家就可…

【数论】YY的GCD(P2257)

正题 P2257 题目大意 给你T组询问&#xff0c;每组询问给出n,m&#xff0c;让你求 1≤x≤n,1≤y≤m1\leq x\leq n,1\leq y\leq m1≤x≤n,1≤y≤m 且 gcd(x,y)primegcd(x,y)primegcd(x,y)prime 的方案数 解题思路 根据题意&#xff0c;有 ∑i1n∑j1m[gcd(i,j)prime]\sum_{i1}…