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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces Round #669 (Div. 2)

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

那天晚上和同學打球打的有點晚,結果就鴿了,現在來補一下

A - Ahahahahahahahaha

直接看原數組中0的個數cnt0和1的個數cnt1,誰多留誰即可,注意留1的時候要留偶數個。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int N=1010; int a[N]; int n; int main() {IO;int T=1;cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];int cnt0=0,cnt1=0;for(int i=1;i<=n;i++){if(a[i]) cnt1++;else cnt0++;}if(cnt1<=n/2){cout<<cnt0<<'\n';for(int i=1;i<=cnt0;i++) cout<<0<<' ';cout<<'\n';}else{if(cnt1&1) cnt1--;cout<<cnt1<<'\n';for(int i=1;i<=cnt1;i++) cout<<1<<' ';cout<<'\n';}}return 0; }

B - Big Vova

直接暴力,從第一位開始每次選一個目前使c[i]最大的數即可,維護d使之為d=gcd(b1,b2…bi)d=gcd(b_1,b_2\dots b_i)d=gcd(b1?,b2?bi?)
時間復雜度O(n2logn)O(n^2logn)O(n2logn)

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N=1010; int a[N],b[N],n; int gcd(int a,int b) {return b?gcd(b,a%b):a; } int main() {IO;int T=1;cin>>T;while(T--){cin>>n;int d=0;for(int i=1;i<=n;i++){cin>>a[i];d=max(a[i],d);}for(int i=1;i<=n;i++){int mx=0;int p=-1;for(int j=1;j<=n;j++){if(a[j]==0) continue;//之前選過if(mx<gcd(d,a[j])){mx=gcd(d,a[j]);p=j;}}b[i]=a[p];d=gcd(d,b[i]);a[p]=0;}for(int i=1;i<=n;i++) cout<<b[i]<<' ';cout<<'\n';}return 0; }

C - Chocolate Bunny

交互題,第一次做什么東西啊
每次選擇沒有確定的兩個位置i,j,詢問i、j和j、i。分析可知這樣一定能確定一個位置的數。總詢問次數為2n?22n-22n?2次,即可原序列。
如果ai>aja_i>a_jai?>aj?,已知ai%aj=xa_i \%a_j= xai?%aj?=xaj%ai=ya_j \%a_i= yaj?%ai?=y,分析可知a[j]=ya[j]=ya[j]=y即確定了一個位置的數。
如果ai<aja_i<a_jai?<aj?,已知ai%aj=xa_i \%a_j= xai?%aj?=xaj%ai=ya_j \%a_i= yaj?%ai?=y,分析可知a[i]=xa[i]=xa[i]=x也能能夠確定一個位置的數。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N=10010; int a[N],n; bool st[N]; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n;int x,y,now=1;for(int i=2;i<=n;i++){cout<<"? "<<now<<' '<<i<<'\n';cout.flush();cin>>x;cout<<"? "<<i<<' '<<now<<'\n';cout.flush();cin>>y;if(x>y){a[now]=x;st[x]=1;now=i;}else{a[i]=y;st[y]=1;}}for(int i=1;i<=n;i++)if(!st[i]) a[now]=i;cout<<"! ";for(int i=1;i<=n;i++) cout<<a[i]<<' ';cout<<'\n';}return 0; }

D - Discrete Centrifugal Jumps

f[i]=min(f[i],f[k]+1)f[i]=min(f[i],f[k]+1)f[i]=min(f[i],f[k]+1) 對于h[k+1…i?1]h[k+1\dots i-1]h[k+1i?1]滿足題目條件即可

// O(n^2) #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=300010; int h[N],n; int f[N]; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>h[i];memset(f,0x3f,sizeof f);f[1]=0;for(int i=1;i<=n;i++){int maxh=0,minh=0x3f3f3f3f;for(int j=i-1;j;j--){if(minh>max(h[i],h[j])||maxh<min(h[i],h[j]))f[i]=min(f[i],f[j]+1);minh=min(minh,h[j]);maxh=max(maxh,h[j]);}}cout<<f[n]<<endl;}return 0; }

嘗試采用單調棧維護一個單調序列不妨先考慮一種情況即max(hi+1,…,hj?1)<min(hi,hj)max(h_{i+1},…,h_{j?1})<min(h_i,h_j)max(hi+1?,,hj?1?)<min(hi?,hj?),維護嚴格單調上升的序列,對于第iii個山峰考慮合法轉移:對于單調棧中的元素如果第一個大于hih_ihi?中的下標是pospospos那么f[pos?1]…f[tt]f[pos-1]\dots f[tt]f[pos?1]f[tt]都可以更新f[i]f[i]f[i],在維護有序棧的同時更新不斷更新答案即可

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N=300010; int h[N],n; int q1[N],tt1; int q2[N],tt2; int f[N]; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>h[i];q1[++tt1]=1,q2[++tt2]=1;for(int i=2;i<=n;i++){f[i]=f[i-1]+1;while(tt1&&h[q1[tt1]]>h[i])f[i]=min(f[q1[tt1--]]+1,f[i]);if(tt1) f[i]=min(f[q1[tt1]]+1,f[i]);while(tt1&&h[q1[tt1]]==h[i]) tt1--;q1[++tt1]=i;while(tt2&&h[q2[tt2]]<h[i])f[i]=min(f[q2[tt2--]]+1,f[i]);if(tt2) f[i]=min(f[q2[tt2]]+1,f[i]);while(tt2&&h[q2[tt2]]==h[i]) tt2--;q2[++tt2]=i;}cout<<f[n]<<'\n';}return 0; }

要加油哦~

總結

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

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