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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【Codeforces #167 Div1 Div2】Solutions

發(fā)布時間:2025/7/14 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Codeforces #167 Div1 Div2】Solutions 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【A. Dima and Friends】

  http://www.codeforces.com/contest/272/problem/A

  題目大意:n+1個人出手指頭,加起來再做類似約瑟夫的出圈,問有多少種方法讓自己不出圈。

View Code 1 #include <iostream> 2 using namespace std; 3 4 int n,a,sum,cnt; 5 6 int main(){ 7 cin>>n; 8 for(int i=0;i<n;i++){ 9 cin>>a; 10 sum+=a; 11 } 12 for(int i=1;i<=5;i++) 13 if((sum+i)%(n+1)!=1) cnt++; 14 cout<<cnt<<endl; 15 return 0; 16 }

?

【B.Dima and Sequence】

  http://www.codeforces.com/contest/272/problem/B

  題目大意:定義一個函數(shù)f(x),問給定數(shù)列an中有多少對函數(shù)值相同的數(shù)。

  由函數(shù)的定義可以看出max{f(x)}并不非常大,由此可以記錄下每一個數(shù)的函數(shù)值進行統(tǒng)計。

View Code 1 #include <iostream> 2 using namespace std; 3 4 int n,a,val[10000010]; 5 long long cnt; 6 7 int f(int x){ 8 if(!x) return x; 9 return (x&1)?(f((x-1)>>1)+1):f(x>>1); 10 } 11 12 int main(){ 13 cin>>n; 14 for(int i=0;i<n;i++){ 15 cin>>a; 16 cnt+=val[f(a)]++; 17 } 18 cout<<cnt<<endl; 19 return 0; 20 }

?

【C.Dima and Staircase】(A in Div1)

  http://www.codeforces.com/contest/272/problem/C

  題目大意:有一個樓梯,在樓梯第一層往下扔長為w,高為h的木塊,規(guī)則類似俄羅斯方塊,回答每個木塊底邊的高度。

  樓梯高度是遞增的,當一個木塊落下時將影響1~w的所有高度,使他們的值相同??梢允褂靡粋€指針表示落下的木塊形成的最高平臺影響的區(qū)域1~p,并記錄1~p的最高高度,每次只需要修改指針即可。

View Code 1 #include <iostream> 2 using namespace std; 3 4 int a[100010],n,m,w,h,cur; 5 long long maxh; 6 7 int main(){ 8 cin>>n; 9 for(int i=1;i<=n;i++) 10 cin>>a[i]; 11 cin>>m; 12 for(int i=1;i<=m;i++){ 13 cin>>w>>h; 14 if(cur<w){ 15 if(a[w]>=maxh){ 16 cout<<a[w]<<endl; 17 maxh=a[w]+h; 18 cur=w; 19 }else{ 20 cout<<maxh<<endl; 21 maxh+=h; 22 cur=w; 23 } 24 }else{ 25 cout<<maxh<<endl; 26 maxh+=h; 27 cur=w; 28 } 29 } 30 return 0; 31 }

?

【D.Dima and Two Sequences】(B in Div1)

  http://www.codeforces.com/contest/272/problem/D

  題目大意:有2*n個點,問有多少種方法使得他們按x坐標不減排序。

  對于x坐標相同的點,一共有種排列方法,但是關鍵問題是其中有重復的點,重復的點互相交換位置不引起方案的變化,設重復點有k個,則方案數(shù)為。

  因為除數(shù)只含有因子2,且被除數(shù)含有的因子2一定比分母含有的多,所以在算階乘的時候逐個除去因子2。

  最后各個不同x坐標的方案數(shù)的乘積為答案。

View Code 1 #include <iostream> 2 #include <utility> 3 #include <algorithm> 4 using namespace std; 5 typedef pair<int,int> PII; 6 7 int x,n,BASE,t,same; 8 PII p[200010]; 9 long long ans=1; 10 11 int main(){ 12 cin>>n; 13 for(int i=0;i<2*n;i++){ 14 cin>>x; 15 p[i]=PII(x,i%n); 16 } 17 cin>>BASE; 18 sort(p,p+2*n); 19 int i=0,j=0; 20 while(i<2*n){ 21 while(j<=2*n && p[j+1].first==p[j].first) 22 if(p[++j].second==p[j-1].second) same++; 23 for(int k=2;k<=j-i+1;k++){ 24 t=k; 25 while(!(t&1) && same) t/=2,same--; 26 ans=(ans*t)%BASE; 27 } 28 i=++j; 29 } 30 cout<<ans<<endl; 31 return 0; 32 }


【E.Dima and Horses】(C in Div1)

  http://www.codeforces.com/contest/272/problem/E

  題目大意:有一群馬,馬之間有仇恨關系,將馬分成兩組,使得任意一匹馬在分組中最多只有一個仇恨關系。

  因為m最大是n(n-1)/2,所以應該沒有無解的情況。。仇恨關系不超過三個,所以dfs一下就可以了。

View Code 1 #include <iostream> 2 using namespace std; 3 4 int n,m,x,y,f[300010],a[300010][4]; 5 6 void dfs(int x){ 7 int cnt=0; 8 for(int i=1;i<=a[x][0];i++) 9 cnt+=f[x]==f[a[x][i]]; 10 if(cnt>1){ 11 f[x]^=1; 12 for(int i=1;i<=a[x][0];i++) 13 if(f[x]==f[a[x][i]]) dfs(a[x][i]); 14 } 15 } 16 17 int main(){ 18 cin>>n>>m; 19 while(m--){ 20 cin>>x>>y; 21 a[x][++a[x][0]]=y; 22 a[y][++a[y][0]]=x; 23 } 24 for(int i=1;i<=n;i++) 25 dfs(i); 26 for(int i=1;i<=n;i++) 27 cout<<f[i]; 28 }

?

【D.Dima and Figure】(Div 1)

  http://www.codeforces.com/contest/273/problem/D

  

  

轉載于:https://www.cnblogs.com/Delostik/archive/2013/02/14/2911239.html

總結

以上是生活随笔為你收集整理的【Codeforces #167 Div1 Div2】Solutions的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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