Codeforces Round #499 (Div. 1) Solution

Codeforces Round #499 (Div. 1) Solution

https://codeforces.com/contest/1010

为啥我\(\rm Div.1\)\(A4\)题还是\(\rm specialist....\)

A. Fly

二分答案,送分题。

#include<bits/stdc++.h>
using namespace std;void read(int &x) {x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}void print(int x) {if(x<0) putchar('-'),x=-x;if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}#define lf double
#define ll long long #define pii pair<int,int >
#define vec vector<int >#define pb push_back
#define mp make_pair
#define fr first
#define sc second#define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) const int maxn = 2e5+10;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 1e9+7;int a[maxn],b[maxn],n,m;int check(lf x) {for(int i=1;i<=n-1;i++) {x-=(x+m)/(lf)a[i];x-=(x+m)/(lf)b[i+1];if(x<0) return 0;}x-=(x+m)/(lf)a[n];x-=(x+m)/(lf)b[1];if(x<0) return 0;return 1;
}int main() {read(n),read(m);FOR(i,1,n) read(a[i]);FOR(i,1,n) read(b[i]);lf l=0,r=2e9;while(r-l>1e-6) {lf mid=(l+r)*0.5;if(check(mid)) r=mid;else l=mid;}if(l>1e9) puts("-1");else printf("%.10lf\n",l);return 0;
}

B. Rocket

简单的交互题。

第一轮先每次都问\(1\),问出这个位置是真还是假,然后二分答案就好了。

#include<bits/stdc++.h>
using namespace std;void read(int &x) {x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}void print(int x) {if(x<0) putchar('-'),x=-x;if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}#define lf double
#define ll long long #define pii pair<int,int >
#define vec vector<int >#define pb push_back
#define mp make_pair
#define fr first
#define sc second#define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) const int maxn = 2e5+10;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 1e9+7;int a[maxn],n,m;int main() {read(n),read(m);for(int i=1;i<=m;i++) {puts("1");fflush(stdout);read(a[i]);if(!a[i]) return 0;}int l=1,r=n;for(int i=m+1;i<=60;i++) {int mid=(l+r)>>1,x;write(mid);fflush(stdout);read(x);if(!x) return 0;if(x==a[(i-1)%m+1]) l=mid+1;else r=mid-1;}return 0;
}

C. Border

小凯的疑惑。

先把所有数求\(\gcd\),那么这就是我们可以凑出来的最小的非\(0\)数了,具体参见小凯的疑惑,两个互质的数\(a,b\)不可以凑出来的最小的数是\(ab-a-b\)

#include<bits/stdc++.h>
using namespace std;void read(int &x) {x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}void print(int x) {if(x<0) putchar('-'),x=-x;if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}#define lf double
#define ll long long #define pii pair<int,int >
#define vec vector<int >#define pb push_back
#define mp make_pair
#define fr first
#define sc second#define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) const int maxn = 1e6+10;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 1e9+7;int a[maxn],n,m,c[maxn][2],f[maxn],g[maxn],op[maxn],vis[maxn];int main() {read(n),read(m);int t=m;for(int i=1;i<=n;i++) read(a[i]),t=__gcd(t,a[i]);int x=t;while(!vis[x]) vis[x]=1,x=(x+t)%m;int ans=0;for(int i=0;i<m;i++) ans+=vis[i];write(ans);for(int i=0;i<m;i++) if(vis[i]) printf("%d ",i);puts("");return 0;
}

D. Mars rover

简单的\(\rm tree\ dp\),设\(f[i]\)表示\(i\)的子树传上来的数,\(g[i]\)表示\(i\)这个点的结果反转,忽视\(i\)的子树,\(1\)的结果。

那么直接深搜暴力更新就好了,先更新\(f\)在更新\(g\)

#include<bits/stdc++.h>
using namespace std;void read(int &x) {x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}void print(int x) {if(x<0) putchar('-'),x=-x;if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}#define lf double
#define ll long long #define pii pair<int,int >
#define vec vector<int >#define pb push_back
#define mp make_pair
#define fr first
#define sc second#define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) const int maxn = 1e6+10;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 1e9+7;int a[maxn],n,m,c[maxn][2],f[maxn],g[maxn],op[maxn];char s[5];void dfs(int x) {if(c[x][0]) dfs(c[x][0]);if(c[x][1]) dfs(c[x][1]);int a=f[c[x][0]],b=f[c[x][1]];if(op[x]==1) f[x]=a&b;else if(op[x]==2) f[x]=a|b;else if(op[x]==3) f[x]=a^b;else if(op[x]==4) f[x]=!a;
}void dp(int x,int fa,int e) {if(x!=1) {int o=op[fa];if(o==1) {if((f[e]&(!f[x]))!=f[fa]) g[x]=g[fa];else g[x]=f[1];} else if(o==2) {if((f[e]|(!f[x]))!=f[fa]) g[x]=g[fa];else g[x]=f[1];} else if(o==3) {if((f[e]^(!f[x]))!=f[fa]) g[x]=g[fa];else g[x]=f[1];} else if(o==4) g[x]=g[fa];}if(c[x][0]) dp(c[x][0],x,c[x][1]);if(c[x][1]) dp(c[x][1],x,c[x][0]);
}int main() {read(n);for(int i=1;i<=n;i++) {scanf("%s",s+1);if(s[1]=='A') op[i]=1;else if(s[1]=='O') op[i]=2;else if(s[1]=='X') op[i]=3;else if(s[1]=='N') op[i]=4;else op[i]=5;if(op[i]<=3) read(c[i][0]),read(c[i][1]);else if(op[i]==4) read(c[i][0]);else read(f[i]);}dfs(1);g[1]=!f[1];dp(1,0,0);for(int i=1;i<=n;i++) if(op[i]==5) putchar(g[i]+'0');return 0;
}

E. Store

\(\rm kd\ tree\),不想写先咕着...

F. Tree

这是一道毒瘤题。

由于这题非常巧妙而且非常毒瘤我就新开了一篇来写。

题解看这里:Codeforces Round #499 (Div. 1) F. Tree

这里扔个代码把:

#include<bits/stdc++.h>
using namespace std;void read(int &x) {x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}void print(int x) {if(x<0) putchar('-'),x=-x;if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}#define lf double
#define ll long long #define pii pair<int,int >
#define vec vector<int >#define pb push_back
#define mp make_pair
#define fr first
#define sc second
#define _sz(x) ((int)x.size())#define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) const int maxn = 1<<19|10;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 998244353;int add(int x,int y) {return x+y>=mod?x+y-mod:x+y;}
int del(int x,int y) {return x-y<0?x-y+mod:x-y;}
int mul(int x,int y) {return 1ll*x*y-1ll*x*y/mod*mod;}int qpow(int a,int x) {int res=1;for(;x;x>>=1,a=mul(a,a)) if(x&1) res=mul(res,a);return res;
}namespace poly {int N,w[maxn],pos[maxn],bit,mxn,t[2][maxn];void init(int l) {for(mxn=1;mxn<=l;mxn<<=1) ;w[0]=1,w[1]=qpow(3,(mod-1)/mxn);for(int i=2;i<=mxn;i++) w[i]=mul(w[i-1],w[1]);}void ntt(int *r,int op) {FOR(i,1,N-1) if(pos[i]>i) swap(r[pos[i]],r[i]);for(int i=1,d=mxn>>1;i<N;i<<=1,d>>=1)for(int j=0;j<N;j+=i<<1)for(int k=0;k<i;k++) {int x=r[j+k],y=mul(r[i+j+k],w[k*d]);r[j+k]=add(x,y),r[i+j+k]=del(x,y);}if(op==-1) {reverse(r+1,r+N);int d=qpow(N,mod-2);for(int i=0;i<N;i++) r[i]=mul(r[i],d);}}vec pmul(vec a,vec b) {if(1ll*_sz(a)*_sz(b)<=5000) {vec c;c.resize(_sz(a)+_sz(b)-1);FOR(i,0,_sz(a)-1) FOR(j,0,_sz(b)-1) c[i+j]=add(c[i+j],mul(a[i],b[j]));return c;}for(N=1,bit=0;N<_sz(a)+_sz(b);N<<=1,bit++);FOR(i,0,N-1) pos[i]=pos[i>>1]>>1|((i&1)<<(bit-1));FOR(i,0,_sz(a)-1) t[0][i]=a[i];FOR(i,_sz(a),N) t[0][i]=0;FOR(i,0,_sz(b)-1) t[1][i]=b[i];FOR(i,_sz(b),N) t[1][i]=0;ntt(t[0],1),ntt(t[1],1);FOR(i,0,N-1) t[0][i]=mul(t[0][i],t[1][i]);ntt(t[0],-1);vec c;FOR(i,0,_sz(a)+_sz(b)-1) c.pb(t[0][i]);return c;}vec padd(vec a,vec b) {if(_sz(a)>_sz(b)) {FOR(i,0,_sz(b)-1) a[i]=add(a[i],b[i]);return a;}FOR(i,0,_sz(a)-1) b[i]=add(a[i],b[i]);return b;}
}ll k;
int n,ch[maxn],head[maxn],tot,sz[maxn],F[maxn],cnt;
struct edge{int to,nxt;}e[maxn<<1];vec f[maxn],r[maxn];void ins(int u,int v) {e[++tot]=(edge){v,head[u]},head[u]=tot;}void dfs(int x,int fa) {sz[x]=1;F[x]=fa;for(int i=head[x],v;i;i=e[i].nxt)if((v=e[i].to)!=fa) {dfs(v,x);sz[x]+=sz[v];if(sz[ch[x]]<sz[v]) ch[x]=v;}
}void solve(int lt,int rt,vec &a,vec &b) {if(lt==rt) return a=b=r[lt],void();vec al,ar,bl,br;int mid=(lt+rt)>>1;solve(lt,mid,al,bl),solve(mid+1,rt,ar,br);b=poly::pmul(bl,br);a=poly::padd(poly::pmul(ar,bl),al);
}vec dfs2(int x) {for(int t=x;t;t=ch[t]) {for(int i=head[t];i;i=e[i].nxt) if(e[i].to!=F[t]&&e[i].to!=ch[t]) f[t]=dfs2(e[i].to);if(_sz(f[t])<1) f[t].resize(1);f[t][0]++;f[t].insert(f[t].begin(),0);}cnt=0;for(int t=x;t;t=ch[t]) r[++cnt]=f[t];vec a,b;solve(1,cnt,a,b);return a;
}int main() {read(n),scanf("%lld",&k);poly::init(n<<1);k%=mod;for(int i=1,x,y;i<n;i++) read(x),read(y),ins(x,y),ins(y,x);dfs(1,0);vec res=dfs2(1);int t=1,ans=0;for(int i=1;i<_sz(res);i++) {ans=add(ans,mul(res[i],t));t=mul(t,mul((k+i)%mod,qpow(i,mod-2)));}write(ans);return 0;
}

转载于:https://www.cnblogs.com/hbyer/p/11032073.html

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

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

相关文章

Windows10家庭版安装Docker Desktop(非Docker Toolbox)

现在大部分笔记本预装的都是win10家庭版&#xff0c;而家庭版又不支持Hyper-V&#xff0c;Docker Desktop是无法直接安装的。但其实家庭版是可以通过脚本开启Hyper-V来安装Docker Desktop的。下面就教大家如何操作。 开启Hyper-V 添加方法非常简单&#xff0c;把以下内容保存…

阿里P7手把手教你!阿里P7级别面试经验总结,搞懂这些直接来阿里入职

什么是中年危机 根据权威数据显示&#xff0c;国内IT程序员鼎盛时期是在25-27岁左右&#xff0c;30岁对于程序员而言完全是一个38线&#xff0c;接着就是转业转岗的事情&#xff0c;这一点在业界也算是一个共识了。 大学毕业步入IT行业普遍年龄也是在22岁左右&#xff0c;然而…

自适应阈值化操作:adaptiveThreshold()函数

在图像阈值化操作中&#xff0c;更关注的是从二值化图像中&#xff0c;分离目标区域和背景区域&#xff0c;但是仅仅通过设定固定阈值很难达到理想的分割效果。而自适应阈值&#xff0c;则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。这样做的好处&#xf…

阿里P8亲自教你!Activity的6大难点,你会几个?年薪50W

前言 网上有很多对程序员简历的一些指导&#xff0c;这里就不重述&#xff0c;大家可以搜下网上其他大神的总结&#xff0c;结合自身情况修改下。我有几点建议&#xff1a; 1.尽量不要花哨&#xff0c;程序员和设计师或者产品运营还不一样&#xff0c;我们的简历成功与否决定…

为什么选用NACOS

Nacos Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如…

Qt样式表之一:Qt样式表和盒子模型介绍

一、Qt样式表介绍 Qt样式表是一个可以自定义部件外观的十分强大的机制&#xff0c;可以用来美化部件。Qt样式表的概念、术语和语法都受到了HTML的层叠样式表&#xff08;Cascading Style Sheets, CSS)的启发&#xff0c;不过与CSS不同的是&#xff0c;Qt样式表应用于部件的世界…

阿里P8大佬亲自教你!Android内存泄漏总结,看看这篇文章吧!

前言 这次去腾讯面试的是我大学同学&#xff0c;我们大学都是一学习&#xff0c;一起吃饭&#xff0c;一起洗脚&#xff0c;一起。。。 他们公司最近也裁员了&#xff0c;不过他是裁员前去的腾讯&#xff0c;不知道谁捞到他简历了&#xff0c;莫名就走了流程&#xff0c;他莫…

Sentinel在订单大量服务调用的应用场景

Sentinel译为“哨兵”&#xff0c;顾名思义&#xff0c;面对您后台的大量服务/微服务&#xff0c;前置一个哨兵&#xff0c;但面对大量请求时&#xff0c;让后台服务有序被调用&#xff0c;但某些服务的不可用时&#xff0c;采用服务熔断降级等措施&#xff0c;让系统仍能平稳运…

leetcode 214 Shortest Palindrome

lc214 Shortest Palindrome 可以将问题转化成找到原字符串的最长palindrome子串&#xff08;注意&#xff0c;子串必须以s[0]为起始&#xff09; 例如&#xff1a;sdserf sds为最长palindrome子串 只需要将sds之后的子串翻转一下&#xff0c;补充到原字符串之前即可 fre sdser…

程序员深度学习!我想谈谈关于Android面试那些事,附赠课程+题库

想要成为一名优秀的Android开发&#xff0c;你需要一份完备的知识体系&#xff0c;在这里&#xff0c;让我们一起成长为自己所想的那样~。 25%的面试官会在头5分钟内决定面试的结果60%的面试官会在头15分钟内决定面试的结果 一般来说&#xff0c;一场单面的时间在30分钟左右&…

MOSS 代替Spring Boot Admin 的服务治理工具

1.1 什么是服务治理 服务治理&#xff0c;我也称之为微服务治理&#xff0c;是指用来管理微服务的整个生命周期。包括应用的创建&#xff0c;服务名的规范&#xff0c;服务的上下线&#xff0c;服务的迁移&#xff0c;整个服务的生老病死等方方面面的治理。 1.2 Moss概述 Mo…

Django之form表单组件、cookie与session

---恢复内容开始--- Form表单组件 引例&#xff1a; 先来看一个注册的例子&#xff0c;全部用的是reg函数来实现的。 views.py文件 def reg(request):errors {username:,password:}if request.method POST:username request.POST.get(username)password request.POST.get(p…

程序员经验分享:Android高级工程师系列学习路线介绍,面试必备

前言 曾听过很多人说Android学习很简单&#xff0c;做个App就上手了&#xff0c;工作机会多&#xff0c;毕业后也比较容易找工作。这种观点可能是很多Android开发者最开始入行的原因之一。 在工作初期&#xff0c;工作主要是按照业务需求实现App页面的功能&#xff0c;按照设…

Java实现将文件或者文件夹压缩成zip

Java实现将文件或者文件夹压缩成zip 最近碰到个需要下载zip压缩包的需求&#xff0c;于是我在网上找了下别人写好的zip工具类。但找了好多篇博客&#xff0c;总是发现有bug。因此就自己来写了个工具类。 这个工具类的功能为&#xff1a; &#xff08;1&#xff09;可以压缩文件…

算法题+JVM+自定义View,隔壁都馋哭了

反思 昨晚去北京大望路阿里面试, 产生了严重的挫败感, 羞愧难当. 比不得从大学就有目标有理想, 一直在为目标努力学习技术的同学, 在大学唯一能拿得出手的就是参加了电子设计大赛, 学了点嵌入式的知识. 毕业后开始做android, 说得好听点叫做项目, 实际上就是搬代码, 真正记到…

n2n内网穿透打洞部署全过程 + nginx公网端口映射

内网穿透、打洞工具有很多&#xff0c;此前在windows上使用的是vidcc这个玩意&#xff0c;也正因为linux不支持。自此在linux尝试过一些打洞工具&#xff0c;ssh 反向代理这些&#xff0c;因为安全性不便捷等多种原因&#xff0c;最终选择了n2n。 由于初次接触n2n&#xff0c;对…

Windows下快速删除上万个文件和子目录

为什么会慢 如果直接在Windows文件管理器里删除的话&#xff08;通过菜单或者键盘Del或者ShiftDel&#xff09;&#xff0c;删除这个数量的文件需要大概10几分钟&#xff0c;具体根据文件数量目录层次不同耗时不同。这么慢是因为在删除之前系统有个准备阶段&#xff0c;在这个阶…

终于有人把安卓程序员必学知识点全整理出来了,BAT大厂面试总结

行业激烈变化时&#xff0c;恰恰是机会最多的时候 坦白讲&#xff0c;许多人骨子里害怕变化和竞争。 其实大可不必。 一来&#xff0c;怕也没用嘛。二来&#xff0c;变化越快&#xff0c;组合要素增加了&#xff0c;意味着新的工作机会越多。 就像传统媒体VS新媒体。 放在…

c#反混淆工具de4dot 一般混淆都可以解决

c#反混淆工具de4dot 一般混淆都可以解决 使用方法&#xff1a; 1、CMD 打开 De4Dot 所在文件夹 最好是以管理员身份运行CMD 2、输入 De4Dot C:\Users\muzigaiyu\Desktop\demo.exe 回车 成功后会在软件所在文件夹生成 demo-cleaned.exe 在用dotpeek 或者其他软件打开exe即可看…

餐厅点餐系统:测试与部署

项目测试与部署 1.系统测试 项目调试完成后&#xff0c;将项目打包成war包放入tomcat/wabapps文件夹&#xff0c;本机启动tomcat&#xff0c;redis缓存&#xff0c;mysql数据库等服务&#xff0c;本机访问localhost&#xff1a;8080/BookFood&#xff0c;测试系统的各个功能是否…