Codeforces Round #490 (Div. 3)【完结】
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #490 (Div. 3)【完结】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2022.3.3
題單地址:https://codeforces.com/contest/999
目錄
- A. Mishka and Contest【模擬】
- B. Reversing Encryption【模擬】
- C. Alphabetic Removals【貪心】
- D. Equalize the Remainders【貪心+set的用法】
- E. Reachability from the Capital【強連通 從一個點可以到達所有的點最少加的邊數】
- F. Cards and Joy【DP】
A. Mishka and Contest【模擬】
#include<bits/stdc++.h> using namespace std; typedef long long int LL; const int N=1e5*5+10; int n,a[N],k,cnt; int main(void) {cin>>n>>k;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){if(k>=a[i]) cnt++;else break;}for(int i=n;i>=1;i--) {if(k>=a[i]) cnt++;else break;}cout<<min(cnt,n);return 0; }B. Reversing Encryption【模擬】
題目的意思就是,加密是按照n的因子從大到小翻轉。
故解密就是逆著進行即可。
#include<bits/stdc++.h> using namespace std; int n; string s; void solve() {set<int>st;for(int i=1;i<=n/i;i++){if(n%i==0)st.insert(i),st.insert(n/i);}for(auto i=st.begin();i!=st.end();i++){int t=*i;reverse(s.begin(),s.begin()+t);}cout<<s; } int main(void) {cin>>n>>s;solve();return 0; }C. Alphabetic Removals【貪心】
就是先按照順序保存各個位置,按照題目所說的刪除即可。
D. Equalize the Remainders【貪心+set的用法】
#include<bits/stdc++.h> using namespace std; const int N=1e5*2+10; typedef long long int LL; LL a[N],cnt[N],n,m,ans; set<int>s; int main(void) {cin>>n>>m;for(int i=0;i<m;i++) s.insert(i);//將所有的余數先存起來int k=n/m;for(int i=0;i<n;i++){cin>>a[i];int d=a[i]%m,x;if(d>*s.rbegin()) x=*s.begin();//比最大的還大,那么最優的就是最小的 else x=*s.lower_bound(d);//找到大于等于d的最近的值 cnt[x]++;if(cnt[x]==k) s.erase(x);//夠了就刪除 ans+=(x-d+m)%m;a[i]+=(x-d+m)%m;}cout<<ans<<endl;for(int i=0;i<n;i++) cout<<a[i]<<" ";return 0; }E. Reachability from the Capital【強連通 從一個點可以到達所有的點最少加的邊數】
- 首先進行dfs對所有可以由s直接到達(不添加邊)的點做一個標記。
- 然后對于其他需要添加邊到達的點,同樣進行dfs,很明顯,如果節點u是某一個需要添加邊的分量的樹的根節點,最優解只需要從s添加一條邊到這個根節點u就行了。最后只需要判斷有幾個這樣的根節點就ok了。
F. Cards and Joy【DP】
需要注意的是,那些都不喜歡的卡片是沒有價值的。
總結
以上是生活随笔為你收集整理的Codeforces Round #490 (Div. 3)【完结】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ACM入门之【前缀和】
- 下一篇: Codeforces Beta Roun