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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces Round #592 (Div. 2) F. Chips 构造 + 细节

發(fā)布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Round #592 (Div. 2) F. Chips 构造 + 细节 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

傳送門

文章目錄

  • 題意:
  • 思路:

題意:

思路:

惡心的構(gòu)造題,思路很簡單但是代碼細節(jié)很多,搞了半天。
根據(jù)題目的性質(zhì)不難發(fā)現(xiàn),如果有兩個相同顏色的球相鄰,那么他們的顏色永遠不會改變。
根據(jù)這個性質(zhì),我們將相同顏色的球作為分割點,將其分成若干段,每段都是WBWBWBWBWBWBWBWBWB或者BWBWBWBWBWBWBWBWBW這樣交替來的序列,不難發(fā)現(xiàn)每次操作只會將其兩端的顏色改變,所以直接模擬就好了。注意首端和末端是相連的,還需要特判一下。
還需要注意,如果kkk的次數(shù)不能遍歷完整個序列,由于序列沒有遍歷到的部分也是變化的,所以特判一下kkk的奇偶性,讓后提前改變一下即可。

UPD:
貌似可以直接記錄一下每個位置最少在第幾次操作內(nèi)改變,讓后判斷一下跟kkk的關(guān)系即可。
最后貼了個代碼,比我思路好寫1W1W1W倍。

// Problem: F. Chips // Contest: Codeforces - Codeforces Round #592 (Div. 2) // URL: https://codeforces.com/contest/1244/problem/F // Memory Limit: 256 MB // Time Limit: 1000 ms // // Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native") //#pragma GCC optimize(2) #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<map> #include<cmath> #include<cctype> #include<vector> #include<set> #include<queue> #include<algorithm> #include<sstream> #include<ctime> #include<cstdlib> #include<random> #include<cassert> #define X first #define Y second #define L (u<<1) #define R (u<<1|1) #define pb push_back #define mk make_pair #define Mid ((tr[u].l+tr[u].r)>>1) #define Len(u) (tr[u].r-tr[u].l+1) #define random(a,b) ((a)+rand()%((b)-(a)+1)) #define db puts("---") using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); } //void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); } //void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f; const double eps=1e-6;int n,k; char s[N]; char ans[N]; bool st[N];bool check() {for(int i=0;i<n;i++) if(st[i]) return true;return false; }int main() { // ios::sync_with_stdio(false); // cin.tie(0);cin>>n>>k>>(s);for(int i=0;i<n;i++) {if(s[i]==s[(i-1+n)%n]||s[i]==s[(i+1)%n]) st[i]=true;}if(!check()) {k%=2;if(k) {for(int i=0;i<n;i++) if(s[i]=='B') s[i]='W'; else s[i]='B';}printf("%s\n",s);} else {int end=n-1,begin=0;while(!st[begin]) begin++; begin--;while(!st[end]) end--; end++;if(k%2==1) {for(int i=0;i<=begin;i++) if(s[i]=='B') s[i]='W'; else s[i]='B';for(int i=end;i<n;i++) if(s[i]=='B') s[i]='W'; else s[i]='B';}int cnt=begin+1+n-end;begin+=n; begin%=n; end%=n;for(int l=end,r=begin,t=k;cnt>0&&t;t--,cnt-=2) {char ls=s[(l-1+n)%n],rs=s[(r+1)%n];s[l]=ls; s[r]=rs;l++; r--;r+=n; r%=n; l%=n;}end--; begin++; end+=n; end%=n; begin%=n;for(int i=begin;i<=end;i++) {if(st[i]) continue;int l=i;int cnt=0;while(i<=end&&!st[i]) cnt++,i++; i--;int r=l+cnt-1;if(k%2==1) {for(int i=l;i<=r;i++) if(s[i]=='B') s[i]='W'; else s[i]='B';}for(int t=k;t&&l<=r;t--) {char ls=s[(l-1+n)%n],rs=s[(r+1)%n];s[l]=ls; s[r]=rs;l++; r--;}}printf("%s\n",s);}return 0; } /* 16 7 WBBWBWWBBWBWWBWW WBBBWWWBBBWWWWWW */ // Problem: F. Chips // Contest: Codeforces - Codeforces Round #592 (Div. 2) // URL: https://codeforces.com/contest/1244/problem/F // Memory Limit: 256 MB // Time Limit: 1000 ms // // Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native") //#pragma GCC optimize(2) #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<map> #include<cmath> #include<cctype> #include<vector> #include<set> #include<queue> #include<algorithm> #include<sstream> #include<ctime> #include<cstdlib> #include<random> #include<cassert> #define X first #define Y second #define L (u<<1) #define R (u<<1|1) #define pb push_back #define mk make_pair #define Mid ((tr[u].l+tr[u].r)>>1) #define Len(u) (tr[u].r-tr[u].l+1) #define random(a,b) ((a)+rand()%((b)-(a)+1)) #define db puts("---") using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); } //void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); } //void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f; const double eps=1e-6;int n,k; char s[N]; char ans[N]; bool st[N]; int op[N]; char change[N];bool check() {for(int i=0;i<n;i++) if(st[i]) return true;return false; }int main() { // ios::sync_with_stdio(false); // cin.tie(0);cin>>n>>k>>(s);for(int i=0;i<n;i++) {if(s[i]==s[(i-1+n)%n]||s[i]==s[(i+1)%n]) st[i]=true;}if(!check()) {k%=2;if(k) {for(int i=0;i<n;i++) if(s[i]=='B') s[i]='W'; else s[i]='B';}printf("%s\n",s);} else {memset(op,0x3f,sizeof(op));for(int i=0;i<n;i++) {int cnt,now; if(st[i]&&!st[(i+1)%n]) {now=(i+1)%n; cnt=0;while(!st[now]) {cnt++;if(op[now]>cnt) {op[now]=cnt;change[now]=s[i];}now++; now%=n;}} if(st[i]&&!st[(i-1+n)%n]) {now=(i-1+n)%n; cnt=0;while(!st[now]) {cnt++;if(op[now]>cnt) {op[now]=cnt;change[now]=s[i];}now--; now+=n; now%=n;}}}for(int i=0;i<n;i++) {if(op[i]<=k) {s[i]=change[i];} else {if(op[i]!=INF&&k%2==1) {if(s[i]=='W') s[i]='B';else s[i]='W';}}}printf("%s\n",s);}return 0; } /* 16 7 WBBWBWWBBWBWWBWW WBBBWWWBBBWWWWWW */

總結(jié)

以上是生活随笔為你收集整理的Codeforces Round #592 (Div. 2) F. Chips 构造 + 细节的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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