日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Educational Codeforces Round 64(Unrated for Div.1+Div. 2)

發布時間:2024/10/12 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Educational Codeforces Round 64(Unrated for Div.1+Div. 2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么垃圾比賽,A題說的什么鬼楞是沒看懂。就我只會BD(其實C是個大水題二分),垃圾游戲,技不如人,肝敗嚇瘋,告辭,口胡了E就睡覺了。

B

很容易發現,存在一種方案,使得相同字母連在一起,然后發現,當字母出現種類數大于等于4時,可以奇偶性相間地連接,然后討論種類數<=3的:種類數為1,顯然直接輸出;種類數為2,若兩字母相鄰則無解,否則直接輸出;種類數為3,若三字母相鄰則無解,否則按照213/231(至少一種符合條件)輸出。

#include<bits/stdc++.h> using namespace std; const int N=107; int T,n,m,ans,sum[N],id[N]; char s[N]; int main() {scanf("%d",&T);while(T--){scanf("%s",s+1),n=strlen(s+1);memset(sum,0,sizeof sum);memset(id,0,sizeof id);for(int i=1;i<=n;i++)sum[s[i]-'a'+1]++;int num=0;for(int i=1;i<=26;i++)if(sum[i])id[i]=++num;if(num==1){for(int i=1;i<=n;i++)printf("%c",s[i]);}else if(num>=4){for(int i=26;i>=1;i--)if(id[i]&1){for(int j=1;j<=sum[i];j++)printf("%c",'a'+i-1);}for(int i=26;i>=1;i--)if(id[i]&&id[i]%2==0){for(int j=1;j<=sum[i];j++)printf("%c",'a'+i-1);}}else if(num==3){int flag=0;for(int i=2;i<=25;i++)if(sum[i]&&sum[i-1]&&sum[i+1])flag=1;if(flag)printf("No answer");else{for(int i=2;i<=25;i++)for(int j=1;j<i;j++)for(int k=i+1;k<=26;k++)if(sum[j]&&sum[i]&&sum[k]){for(int t=1;t<=sum[i];t++)printf("%c",'a'+i-1);if(j==i-1){for(int t=1;t<=sum[k];t++)printf("%c",'a'+k-1);for(int t=1;t<=sum[j];t++)printf("%c",'a'+j-1);}else{for(int t=1;t<=sum[j];t++)printf("%c",'a'+j-1);for(int t=1;t<=sum[k];t++)printf("%c",'a'+k-1);}}}}else{int flag=0;for(int i=1;i<=25;i++)if(sum[i]&&sum[i+1])flag=1;if(flag)printf("No answer");else{for(int i=1;i<=26;i++)if(sum[i]){for(int j=1;j<=sum[i];j++)printf("%c",'a'+i-1);}}}puts("");} } View Code

D

很容易想到一個DP,令f[i]表示以i為根的子樹,從下面的節點走上來,最后一步是黑邊的點數,g[i]表示全走白邊的點數,于是就有f[u]=Σ(f[son]+g[son]+1),son為經過黑邊的son,g[u]=Σ(g[son]+1),son為經過白邊的son。然后這個東西很容易換根DP,根據黑白邊討論一下即可。

#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+7; int n,cnt,f[N],g[N],nf[N],ng[N],hd[N],v[N<<1],nxt[N<<1],w[N<<1]; ll ans; void adde(int x,int y,int z){v[++cnt]=y,nxt[cnt]=hd[x],w[cnt]=z,hd[x]=cnt;} void dfs(int u,int fa) {for(int i=hd[u];i;i=nxt[i])if(v[i]!=fa){dfs(v[i],u);if(!w[i])g[u]+=g[v[i]]+1;else f[u]+=f[v[i]]+g[v[i]]+1;} } void dfs2(int u,int fa) {ans+=nf[u]+ng[u];for(int i=hd[u];i;i=nxt[i])if(v[i]!=fa){if(!w[i])nf[v[i]]=f[v[i]],ng[v[i]]=ng[u];else nf[v[i]]=nf[u]-g[v[i]]+ng[u],ng[v[i]]=g[v[i]];dfs2(v[i],u);} } int main() {scanf("%d",&n);for(int i=1,x,y,z;i<n;i++)scanf("%d%d%d",&x,&y,&z),adde(x,y,z),adde(y,x,z);dfs(1,0);nf[1]=f[1],ng[1]=g[1],dfs2(1,0);cout<<ans; } View Code

E

口胡了一個分治做法,一寫發現,它居然過了。感覺本題比D簡單。

做法大致如下:直接算很難處理,考慮分治,對于長度大于等于3的區間[l,r],考慮覆蓋mid和mid+1的所有區間,可以把[l,r]分為[l,mid]和[mid+1,r]兩半,然后mx[i]對于左半部分表示后綴最大值,對于右半部分表示前綴最大值,然后枚舉位置計算另一端的位置是否符合題意,因為區間的max值出現在兩端的mx之一,所以左右都搜一下即可統計所有答案。復雜度O(nlogn)

#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+7; int n,ans,a[N],b[N],mx[N]; void solve(int l,int r) {if(l+1>=r)return;int mid=l+r>>1;solve(l,mid),solve(mid+1,r);mx[mid]=a[mid];for(int i=mid-1;i>=l;i--)mx[i]=max(mx[i+1],a[i]);mx[mid+1]=a[mid+1];for(int i=mid+2;i<=r;i++)mx[i]=max(mx[i-1],a[i]);for(int i=l;i<=mid;i++){int pos=b[mx[i]-a[i]];if(pos>mid&&pos<=r&&mx[pos]<mx[i])ans++;}for(int i=mid+1;i<=r;i++){int pos=b[mx[i]-a[i]];if(pos>=l&&pos<=mid&&mx[pos]<mx[i])ans++;} } int main() {scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]),b[a[i]]=i;solve(1,n);printf("%d",ans); } View Code

F

很容易想到dp,令f[i][j]表示第i輪當前卡為j且游戲繼續的概率,然后根據第i輪每張卡有1/(n-i+1)的概率選中,直接寫個前綴和,根據題意暴力DP轉移即可,代碼20行。

感覺這題更簡單,CF這場什么垃圾排題順序,難怪Unrated

#include<bits/stdc++.h> using namespace std; const int N=5005,mod=998244353; int n,ans,a[N],s[N],inv[N],f[N][N]; int main() {scanf("%d",&n);for(int i=1,x;i<=n;i++)scanf("%d",&x),a[x]++;for(int i=n;i;i--)s[i]=s[i+1]+a[i];inv[1]=1;for(int i=2;i<=n;i++)inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;for(int i=1;i<=n;i++)f[1][i]=1ll*a[i]*inv[n]%mod;for(int i=2;i<=n;i++)for(int j=1,sum=0;j<=n;j++)f[i][j]=1ll*a[j]*sum%mod,sum=(sum+1ll*f[i-1][j]*inv[n-i+1])%mod;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(a[j]>1)ans=(ans+1ll*f[i][j]%mod*(a[j]-1)%mod*inv[n-i])%mod;printf("%d",ans); } View Code

G

看了下是個沒有意思的大模擬,不想寫也不會寫,咕了。

感覺真實難度順序:C<B<E<D=F<G<A

轉載于:https://www.cnblogs.com/hfctf0210/p/10801290.html

總結

以上是生活随笔為你收集整理的Educational Codeforces Round 64(Unrated for Div.1+Div. 2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区91 | 欧美黑人一区 | 国产精品后入内射日本在线观看 | 国产日韩欧美一区二区东京热 | 青青一区二区 | 人妻无码一区二区三区久久 | 97伊人超碰| 精品福利在线 | 色哟哟免费观看 | 国产粉嫩呻吟一区二区三区 | 国产精品无码久久久久高潮 | 国产毛片视频网站 | 国产精品99无码一区二区视频 | 亚洲骚图 | 国产在线观看网站 | 97色干| 三级色视频 | 色综合久久av | av2014天堂网 | 粗大黑人巨茎大战欧美成人免费看 | 色撸撸在线观看 | 91丨九色丨蝌蚪丨丝袜 | 日韩在线观看第一页 | 亚洲先锋影音 | 久久9精品区-无套内射无码 | 伊人一区 | 国产亚洲色婷婷久久99精品91 | 制服.丝袜.亚洲.中文.综合懂 | 国产粉嫩白浆 | 日韩专区一区 | 欧美日韩综合 | 97精品自拍 | 小柔好湿好紧太爽了国产网址 | 日b在线观看 | 五月天婷婷丁香花 | 免费久久 | 国产伦精品一区二区三区 | 欧美一级电影在线 | aa视频免费观看 | 一本色道久久综合亚洲精品小说 | 波多野结衣在线观看一区 | 精品视频一区在线观看 | 亚洲一区二区麻豆 | 一区二区91 | 亚洲在线影院 | 乱淫的女高中暑假调教h | 国产精品亚洲五月天丁香 | 欧美网站在线观看 | 男人操女人下面视频 | 蜜桃成人无码区免费视频网站 | 激情瑟瑟 | 黄色网页在线看 | 欧美性生交大片免费看 | 国产特级黄色录像 | 中文字幕伦理 | 欧洲成人一区二区三区 | 偷自拍 | 午夜操操 | 亚洲成年人av | www.com污| 精品一二三四 | 免费看污黄网站在线观看 | 亚洲精品国产一区二区 | 久热中文字幕 | 在线观看国产精品视频 | 97超碰福利| 综合久久久久久 | 无码人妻av免费一区二区三区 | 少妇高潮一区二区三区99小说 | 亚洲AV无码一区二区伊人久久 | 美女扣逼喷水视频 | 三级自拍视频 | 成人欧美一区二区三区在线观看 | 欧美色图一区 | 久久国产精品毛片 | caopeng视频 | 国产又粗又猛又爽又黄又 | 中文字幕乱码在线观看 | 小泽玛利亚一区二区三区视频 | 成人一区二区av | wwwxxoo| 久久精品视频免费看 | 欧美电影一区 | 蜜桃视频一区二区在线观看 | 日日爽夜夜爽 | 久久四虎 | 老头糟蹋新婚少妇系列小说 | xxxx视频在线 | 欧美在线性爱视频 | 国产黄视频在线观看 | 日韩精品久久久久久 | 亚洲第一国产视频 | 欧美黄色一级片视频 | 无码国精品一区二区免费蜜桃 | 成人97| 91天堂网 | 北岛玲av在线| 欧洲一区二区在线观看 | 国产精品免费无遮挡无码永久视频 |