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.pswp.cn/news/386628.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386628.shtml
英文地址,請注明出處:http://en.pswp.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;測試系統的各個功能是否…