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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Educational Codeforces Round 96 (Rated for Div. 2)

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

今天先補了上一場的Codeforces Global Round 11三道題,做的心神恍惚,然后17點報名沒敢提交,先寫了4個題剩下的改天補一補
我是真的服信號,卷積卷si我了

A - Number of Apartments

枚舉3和5的個數,直接算出來7的個數即可

#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; int main() {IO;int T=1;cin>>T;while(T--){int n;cin>>n;bool ok=0;for(int i=0;i<=n;i++){if(ok) break;for(int j=0;j<=n;j++){int k=n-3*i-5*j;if(k<0||k%7) continue;cout<<i<<' '<<j<<' '<<k/7<<'\n';ok=1;break;}}if(!ok) cout<<-1<<'\n'; }return 0;}

B - Barrels

很明顯需要把第2~k+1大的全部導入最大的容器中,然后求個和即是答案

#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=200010; int n,k; int a[N]; int main() {IO;int T=1;cin>>T;while(T--){cin>>n>>k;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+1+n);reverse(a+1,a+1+n);ll res=0;for(int i=1;i<=k;i++) res+=a[i+1];res+=a[1];cout<<res<<'\n';}return 0;}

C - Numbers on Whiteboard

貪心:1一定最后再用,然后依次用兩個最大的即可。
總的來說就是每次用兩個最大的。

#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=200010; int n,k; int a[N]; int main() {IO;int T=1;cin>>T;while(T--){cin>>n;vector<pii> ans;int now=n;for(int i=1;i<n;i++){ans.push_back({n-i,now});now=(n-i+now+1)/2;}cout<<now<<'\n';for(auto t:ans) cout<<t.first<<' '<<t.second<<'\n';cout<<'\n';}return 0;}

D - String Deletion

首先掃一遍序列,把相同的分段用一個vector存下來,不難發現我如果當前的一段個數大于1我們只需要兩次操作都在這一段即可,否則只需要在后面的段中選擇一個個數大于1的用操作1即可,簡單模擬。

#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=200010; int n,k; char s[N]; int main() {IO;int T=1;cin>>T;while(T--){cin>>n;cin>>s+1;vector<int> now;for(int i=1;i<=n;i++){int j=i+1;while(j<=n&&s[i]==s[j]) j++;now.push_back(j-i);i=j-1;}int res=0;for(int i=0,j=0;i<now.size();i++){if(now[i]>=2){res++;continue;}bool ok=0;j=max(j,i+1);for(;j<now.size();j++){if(now[j]>=2) {now[j]--;ok=1;break;}}if(!ok) i++;res++;}cout<<res<<'\n';}return 0; }

E - String Reversal

不難貪心出結論即:每次選擇離自己最近的字母交換

首先可以記下每個字母出現的位置用26個vector即可,用樹狀數組快速求出每次移動需要的代價然后就不難得出答案了。

#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=200010; char s[N],p[N]; int n; queue<int> mp[27]; int tree[N]; int lowbit(int x) {return x&-x; } void update(int k,int x) {for(;k<=n;k+=lowbit(k)) tree[k]+=x; } int query(int k) {int res=0;for(;k;k-=lowbit(k)) res+=tree[k];return res; } int main() {IO;int T=1;//cin>>T;while(T--){cin>>n;cin>>s+1;for(int i=1;i<=n;i++){mp[s[i]-'a'].push(i);update(i,1);}ll res=0;for(int i=n;i;i--)//逆序字符{int pos=mp[s[i]-'a'].front();mp[s[i]-'a'].pop();res+=query(pos)-1;update(pos,-1);}cout<<res<<'\n';}return 0;}

我是剛剛做完信號的一題來寫的題解,現在心態非常爆炸。。。
題解質量不想說了真的laji

剩下的題明天補一下吧(明天信號又要自己看書了,老師講的根本聽不懂啊啊啊)
要加喲哦~~

總結

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

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