Codeforces Global Round 11——E随机+线性基待补
A - Avoiding Zero
不難發現如果數組所有元素和為0一定不能滿足條件,否則一定能滿足。
假設所有元素和不為0嘗試以下構造,如果正數和小于負數和的絕對值,那么逆序排列,否則順序排列,這樣一定滿足題意。
B - Chess Cheater
瞎搞的
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<unordered_map> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N=100010; char s[N]; int n,k; int main() {IO;int T=1;cin>>T;while(T--){cin>>n>>k;cin>>s+1;priority_queue<int,vector<int>,greater<int>> q1,q2,q3;priority_queue<int> p1,p2;int cnt=0;for(int i=1;i<=n;i++){if(s[i]=='L') cnt++;else {if(!cnt) continue;if(i>cnt+1&&s[i-cnt-1]=='W'&&i<=n&&s[i]=='W') q1.push(cnt);else if(i>cnt+1&&s[i-cnt-1]=='W'||i<=n&&s[i]=='W') q2.push(cnt);else q3.push(cnt);cnt=0;}}if(cnt) {if(n>cnt&&s[n-cnt]=='W') q2.push(cnt);else q3.push(cnt);}int res=0;while(k&&q1.size()){auto v=q1.top();q1.pop();if(k>=v) res+=2*v+1,k-=v;else p1.push(v);}while(k&&q2.size()){auto v=q2.top();q2.pop();if(k>=v) res+=2*v,k-=v;else p2.push(v);}while(k&&(p1.size()||p2.size())){res+=2*k;k=0;}if(k&&q3.size()) {auto v=q3.top();res=2*min(k,v)-1;}for(int i=1;i<=n;i++){if(s[i]=='W'){if(i>1&&s[i-1]=='W') res+=2;else res++;}}cout<<res<<'\n';}return 0; }C - The Hard Work of Paparazzi
剛開始以為是個圖論題,但是有一個條件就是就算你先到了一個點你仍然要等到那個人出現的時間,也就是每個點的時間是確定的,因此每個點的時間是確定的考慮dp
狀態表示:fif_ifi?表示目前在第iii個點時答案的最大值
狀態轉移:fi=max(fi,fi+1)(∣xi?xj∣+∣yi?yj∣≤ti?tj)f_i=max(f_i,f_i+1)(|x_i-x_j|+|y_i-y_j|\leq t_i-t_j)fi?=max(fi?,fi?+1)(∣xi??xj?∣+∣yi??yj?∣≤ti??tj?)
這樣轉移會發現復雜度爆炸O(n2)O(n^2)O(n2),我們可以發現還有個東西一直沒有用也就是地圖的尺寸rrr,由于tit_iti?是順序給出的如果當前的ti?tj≥2rt_i-t_j\ge 2rti??tj?≥2r不難發現1?j1-j1?j的f1?jf_{1-j}f1?j?都能更新fif_ifi?由此嘗試維護前綴進行優化。
時間復雜度好像是O(nr)O(nr)O(nr)
剩下的題待補
D - Unshuffling a Deck
今天早上起來想了一下這個題,想了個貪心的做法然后上課前交代碼發現貪心思路不行,然后吃完午飯又想了個做法水過去了
嘗試每次使得一個數排列歸位。這里嘗試按照n?1n?2…1n-1\ n-2\dots \ 1%n?1?n?2…?1的順序
首先我們讓排好序的排成(目前已經有cnt個數“歸位”)這樣子{[n,n?1,n?2,...,n?cnt+1][...n?cnt][....]}\{[n,n-1,n-2,...,n-cnt+1][...n-cnt][....]\}{[n,n?1,n?2,...,n?cnt+1][...n?cnt][....]}我們只需要這樣劃分就可以在此歸位一個數
{[1]...[1][1]?cnt[len1][len2]}\{ \underbrace{[1]...[1][1]}_{cnt}[len_1][len_2]\}{cnt[1]...[1][1]??[len1?][len2?]}
這樣操作后原序列即變成{[......][n?cnt,n?cnt+1,...,n]}\{[......][n-cnt,n-cnt+1,...,n]\}{[......][n?cnt,n?cnt+1,...,n]}
然后如法炮制的操作,一共進行n次即可歸位。還有些細節可以看代碼
細節1:n奇偶性,最后一次操不能讓序列變成全部逆序的情況,需要順序
細節2:劃分需要至少劃分2個斷,最后需要把劃分成1個段(無效操作)清除掉。
上述方法一定能在n次操作以內完成序列順序。
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<unordered_map> using namespace std; typedef long long ll; typedef pair<int,int> pii; const int N=60; int n,cnt; int a[N],b[N]; vector<int> ans[N]; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];bool flag;int now=n;if(n&1) flag=0;else flag=1;for(int k=1;k<=n;k++){int p;for(int i=1;i<=n;i++) if(a[i]==now) p=i;//cout<<p<<':';//cout<<(int)flag<<'\n';if(!flag)// 左邊整齊{for(int i=1;i<=cnt;i++) ans[k].push_back(1);if(p-cnt) ans[k].push_back(p-cnt);if(n-p) ans[k].push_back(n-p);for(int i=p+1,j=1;i<=n;i++,j++) b[j]=a[i];// p+1~n -> 1~n-p n-pfor(int i=cnt+1,j=n-p+1;i<=p;i++,j++) b[j]=a[i];// cnt+1~p -> n-p+1 p-cntfor(int i=1,j=n;i<=cnt;i++,j--) b[j]=a[i];// 1~cnt -> n~n-cnt+1 cntfor(int i=1;i<=n;i++) a[i]=b[i];}else{if(p-1>0) ans[k].push_back(p-1);if(n-cnt-p+1>0) ans[k].push_back(n-cnt-p+1);for(int i=1;i<=cnt;i++) ans[k].push_back(1);for(int i=1,j=n-p+2;i<=p-1;i++,j++) b[j]=a[i];for(int i=p,j=cnt+1;i<=n-cnt;i++,j++) b[j]=a[i];for(int i=n-cnt+1,j=cnt;i<=n;i++,j--) b[j]=a[i];for(int i=1;i<=n;i++) a[i]=b[i];}now--;cnt++;flag^=1;}int res=0;for(int i=1;i<=n;i++)if(ans[i].size()>1) res++;cout<<res<<'\n';for(int i=1;i<=n;i++){if(ans[i].size()>1){cout<<ans[i].size()<<' ';for(auto t:ans[i]) cout<<t<<' ';cout<<'\n';}}}return 0; }E - Xum
要加喲哦~
總結
以上是生活随笔為你收集整理的Codeforces Global Round 11——E随机+线性基待补的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 迅捷路由器怎么设置无线桥接迅捷路由器FW
- 下一篇: 新疆大学ACM新生赛(公开赛)