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

Codeforces Round #499 (Div. 1) Solution相关推荐

  1. Codeforces Round #499 (Div. 2) Problem-A-Stages(水题纠错)

    CF链接  http://codeforces.com/contest/1011/problem/A Natasha is going to fly to Mars. She needs to bui ...

  2. 7-27 Codeforces Round #499 (Div. 2)

    C. Fly 链接:http://codeforces.com/group/1EzrFFyOc0/contest/1011/problem/C 题型:binary search .math. 题意:总 ...

  3. Codeforces Round #499 (Div. 2): F. Mars rover(DFS)

    题意:给你一个门电路(包含XOR.OR.AND.NOT.IN五种),这个门电路构成了一棵树,其中1号是输出端(根),所有的叶子都是输入端,给出每个节点(门)的功能以及输入端的输入(是0还是1),求出在 ...

  4. Codeforces Round #499 (Div. 2) 1011 C. Fly 二分

    C. Fly time limit per test 1 second memory limit per test 256 megabytes input standard input output ...

  5. Codeforces Round #499 (Div. 2) : C. Fly

    题目链接:嘻嘻嘻 题目大意:不想说 解题思路:很容易就能想到ans = ret * m - m,   ret =  ,    然而long long 也装不下这个大数,如何处理呢?我们可以求出1 / ...

  6. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  7. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  8. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  9. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

最新文章

  1. 矩阵LU分解分块算法实现
  2. python爬取地图上的经纬度_Python调用百度地图API爬取经纬度
  3. Time zone BOGUS not found in registry
  4. ssh框架点击按钮就404_设置404错误页面的5大关键因素
  5. VS2008下编译C++程序,找不到 stdint.h,原因及解决方案
  6. Pheatmap做热图数据处理过程
  7. FPGA设计入门-----1位全加器的设计
  8. android 测试 内存,Android性能测试之内存(二)
  9. 世界上首位程序员Ada
  10. iOS 键盘限制输入内容限制、输入长度限制
  11. ICME2021:基于机器学习的VVC帧内编码码率控制
  12. 熵权法与Apriori算法对较多数据种类数据的处理
  13. 农村产权交易服务平台二次开发html源码
  14. 永中科技是怎样被裁定破产的?
  15. SQL的左连接 ,右连接,内连接和全外连接的4者区别
  16. K8S使用教程(详细)
  17. 古风男孩取名:有帝王气质的古风男孩名字
  18. android+wifi驱动移植,全志R16 android4平台移植wifi资料下载
  19. Wireshark (Chris Sanders)
  20. easeExcel合并行

热门文章

  1. 阿诗玛的传说|阿诗玛民间故事
  2. oracle转mysql总结经验,oracle转mysql总结(转)
  3. python 定义函数为什么有个长线_关于格式化:如何在Python中打破这条长线?
  4. ajax eval html,Ajax eval的应用示例
  5. unity烘培单个物体_Unity可编程渲染管线(SRP)教程:二、自定义着色器
  6. python消息队列中间件_python-RabbtiMQ消息队列
  7. 亚信联创java面试题_亚信联创面试题及答案
  8. nginx post请求超时_nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)
  9. HDU计算机网络系统2021复习提纲
  10. java scanner_Java Scanner nextLong()方法与示例