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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CodeForces 1204 (#581 div 2)

發(fā)布時(shí)間:2024/9/15 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces 1204 (#581 div 2) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

傳送門(mén)

A.BowWow and the Timetable

?題意

給你一個(gè)二進(jìn)制數(shù),讓你求小于這個(gè)數(shù)的所有4的冪的個(gè)數(shù)

?思路

第一反應(yīng)是二進(jìn)制與四進(jìn)制轉(zhuǎn)換

(其實(shí)不用真正的轉(zhuǎn)換 QwQ)

由于二進(jìn)制的兩位對(duì)應(yīng)四進(jìn)制的一位

所以可以得到四進(jìn)制下的位數(shù)

四進(jìn)制的位數(shù)就是小于等于這個(gè)數(shù)的所有4的冪的個(gè)數(shù),類比10進(jìn)制下10的冪

由于不能有等于,所以根據(jù)二進(jìn)制判斷一下這個(gè)數(shù)是不是4的冪

因?yàn)?2,1002,100002 ,二進(jìn)制下4的冪除了首位的1,后面是偶數(shù)個(gè)0

所以判斷是否是1帶偶數(shù)個(gè)0,是的話個(gè)數(shù)減一

?代碼

1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6+5; 4 char s[maxn]; 5 int main() 6 { 7 scanf("%s",s+1); 8 int len=strlen(s+1),flag=0; 9 int cnt=(len+1)/2; 10 for(int i=2;i<=len;i++) 11 if(s[i]=='0') flag++; 12 if(flag==len-1 && len&1) 13 cnt--; 14 printf("%d\n",cnt); 15 } View Code

?

B.Mislove Has Lost an Array

?題意

數(shù)組中只存在$1$或者$x$

$x$是偶數(shù)并且$x/2$必須在數(shù)組中存在

給定$l,r$數(shù)組中最少有$l$個(gè)不同的數(shù),最多有$r$個(gè)不同的數(shù)

求數(shù)組里數(shù)的和的最小最大值

?思路

最小值是有$1,2,4...$等$l$個(gè)數(shù),如果不足n個(gè)用$1$補(bǔ)齊

最大值是有$1,2,4...$等$r$個(gè)數(shù),如果不足用這$r$個(gè)數(shù)中最大的補(bǔ)齊

?代碼

1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 int main() 5 { 6 int n,l,r; 7 cin>>n>>l>>r; 8 ll Min=0; 9 int cnt,i; 10 for(i=1,cnt=1;i<=l;cnt*=2,i++) 11 Min+=cnt; 12 Min+=(n-l); 13 14 ll Max=0; 15 for(cnt=1,i=1;i<=min(n,r);cnt*=2,i++) 16 Max+=cnt; 17 cnt/=2; 18 if(r<=n) 19 Max+=1ll*(n-r)*cnt; 20 cout<<Min<<' '<<Max<<endl; 21 } View Code

?

C.?Anna, Svyatoslav and Maps

?題意

給出鄰接矩陣表示一個(gè)有向圖

"1"代表有路,"0"代表沒(méi)有路

給出長(zhǎng)度為$m$的序列,表示一條最短路

求,這個(gè)序列的一個(gè)子序列s,

滿足這個(gè)子序列s的最短路是m的序列,且s最短

?思路

由于從一個(gè)點(diǎn)到另一個(gè)點(diǎn)的路徑可能不止一條

一旦固定了路徑,那么從這個(gè)點(diǎn)到另一個(gè)點(diǎn)不必須經(jīng)過(guò)的點(diǎn)如果在固定的路徑中的話

就必須有,防止從其它點(diǎn)經(jīng)過(guò)

二那些必須經(jīng)過(guò)的點(diǎn),就不用有了,因?yàn)橐归L(zhǎng)度最短

固定路徑1,2,3,4

1可以直接到3而不必須經(jīng)過(guò)2,但是固定路徑里有2

所以2必須存在,才能使得經(jīng)過(guò)1,2

2到4必須經(jīng)過(guò)3,所以2->4路徑有存在了3

為了使s最短,3不會(huì)有

?代碼

1 #include<bits/stdc++.h> 2 using namespace std; 3 #define inf 0x3f3f3f3f 4 const int maxn=1e6+5; 5 char s[105][105]; 6 int dis[105][105]; 7 int a[maxn],ans[maxn]; 8 int n,m; 9 10 void Init() 11 { 12 for(int i=1;i<=n;i++) 13 { 14 for(int j=1;j<=n;j++) 15 { 16 dis[i][j]=inf; 17 if(i==j) dis[i][j]=0; 18 if(s[i][j]=='1') dis[i][j]=1; 19 } 20 } 21 } 22 23 void floyd() 24 { 25 for(int k=1;k<=n;k++) 26 for(int i=1;i<=n;i++) 27 for(int j=1;j<=n;j++) 28 dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); 29 } 30 31 int main() 32 { 33 scanf("%d",&n); 34 for(int i=1;i<=n;i++) 35 scanf("%s",s[i]+1); 36 Init(); 37 floyd(); 38 39 scanf("%d",&m); 40 for(int i=1;i<=m;i++) 41 scanf("%d",a+i); 42 43 int cnt=0; 44 ans[++cnt]=a[1];/// 45 int pre=a[1]; 46 for(int i=2;i<=m;i++) 47 { 48 int cur=a[i-1]; 49 int nex=a[i]; 50 if(pre==cur) 51 continue; 52 ///要不必須經(jīng)過(guò)的點(diǎn) 53 ///不要必須經(jīng)過(guò)的點(diǎn) 54 if(dis[pre][cur]+dis[cur][nex]!=dis[pre][nex]) 55 { 56 ans[++cnt]=cur; 57 pre=cur; 58 } 59 } 60 ans[++cnt]=a[m];/// 61 62 printf("%d\n",cnt); 63 for(int i=1;i<=cnt;i++) 64 printf("%d ",ans[i]); 65 puts(""); 66 } View Code

?

D.Kirk and a Binary String?

?題意

給你一個(gè)$01$字符串s,讓你找到一個(gè)t串,使得

  • t串與s串的區(qū)間所有單調(diào)非遞減長(zhǎng)度相同
  • t串中0個(gè)數(shù)最多

?思路

對(duì)于一個(gè)字符串,當(dāng)前位置有$0,1$兩種情況

  • 當(dāng)前位置是0

  當(dāng)前位置是0,對(duì)于以他為起點(diǎn)的單調(diào)非遞減子序列肯定有貢獻(xiàn),

  如果變?yōu)?,大多數(shù)情況下長(zhǎng)度會(huì)減小(除了0后面全是1的情況,011111長(zhǎng)度不變)

  如果變?yōu)?,0的數(shù)量比不變減少違背第二個(gè)任務(wù)

  • 當(dāng)前位置是1

  如果變?yōu)?,對(duì)于以他(也就是以1) 為起點(diǎn)的單調(diào)非遞減子序列來(lái)說(shuō),長(zhǎng)度無(wú)影響

  對(duì)于以0為起點(diǎn)的單調(diào)非遞減子序列來(lái)說(shuō),長(zhǎng)度會(huì)受到影響

既然想要更多的0,那就需要盡可能的把1 變成0,那如何才能沒(méi)有影響呢?

那就需要以他(也就是以1) 為起點(diǎn)的單調(diào)非遞減子序列的長(zhǎng)度大于以0為起點(diǎn)的單調(diào)非遞減子序列長(zhǎng)度

因?yàn)橛绊懘缶值淖铋L(zhǎng)的那個(gè),那就讓即使小的變化了,也不會(huì)對(duì)大局產(chǎn)生影響!

換句話說(shuō),若想將$1$ 變?yōu)?$0$ ,必須保證后面所有的區(qū)間的單調(diào)非遞減子序列長(zhǎng)度必須和 1 的個(gè)數(shù)相等

也就是從后往前找,當(dāng)$1$的個(gè)數(shù)大于$0$的個(gè)數(shù)時(shí),$1$才可以變成$0$

?代碼

1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 const int maxn=1e6+4; 5 char s[maxn]; 6 int a[maxn]; 7 int main() 8 { 9 scanf("%s",s+1); 10 int len=strlen(s+1); 11 int cnt=0; 12 for(int i=len;i>=1;i--) 13 { 14 if(s[i]=='0') 15 cnt++; 16 else 17 { 18 if(cnt) --cnt; 19 else s[i]='0'; 20 } 21 } 22 23 printf("%s",s+1); 24 } View Code

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/MMMinoz/p/11511281.html

總結(jié)

以上是生活随笔為你收集整理的CodeForces 1204 (#581 div 2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。