Codeforces Round #501 (Div. 3)【未完结】
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #501 (Div. 3)【未完结】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2022.3.7
題單地址:https://codeforces.com/contest/1015
目錄
- A. Points in Segments
- B. Obtaining the String【模擬】
- C. Songs Compression【貪心】
- D. Walking Between Houses【貪心】
- E1. Stars Drawing (Easy Edition)【暴力 前綴和】
- E2. Stars Drawing (Hard Edition)【前綴和】
- F. Bracket Substring【DP未完結】
A. Points in Segments
差分搞一下,或者區間合并都可以。
B. Obtaining the String【模擬】
#include<bits/stdc++.h> using namespace std; int n; string a,b,s1,s2; int main(void) {cin>>n>>a>>b;s1=a,s2=b;sort(s1.begin(),s1.end());sort(s2.begin(),s2.end());if(s1==s2){vector<int>ve;for(int i=0;i<a.size();i++){if(a[i]==b[i]) continue;else{int pos=0;for(int j=i+1;j<a.size();j++) {if(a[j]==b[i]) {pos=j;break;}}while(a[i]!=b[i]) swap(a[pos],a[pos-1]),ve.push_back(pos),pos--;}}cout<<ve.size()<<endl;for(int i=0;i<ve.size();i++) cout<<ve[i]<<" ";}else puts("-1");return 0; }C. Songs Compression【貪心】
貪心,將按最大的減價,排序。然后枚舉選幾個降價的可以,注意用前綴和來快速的計算。
D. Walking Between Houses【貪心】
先給k天每人選擇1步,然后再看剩余的前幾天分,使得最大步數不會大于(n-1)
選好天數后盡可能的平分。剩余的前幾天每一天加1。
E1. Stars Drawing (Easy Edition)【暴力 前綴和】
#include<bits/stdc++.h> using namespace std; const int N=1010; char a[N][N]; int s1[N][N],s2[N][N],n,m; struct node{int x,y,z;}; vector<node>ve; void solve(int x,int y) {int maxv=0;for(int len=min(n,m);len>=1;len--)//從大到小枚舉尺寸{int l1=x-len,r1=x+len;int l2=y-len,r2=y+len;if(l1<1||r1>n||l2<1||r2>m) continue;int sum1=s1[x][r2]-s1[x][l2-1];int sum2=s2[y][r1]-s2[y][l1-1];int temp=len*2+1;if(sum1==temp&&sum2==temp){maxv=max(maxv,len);break;}}if(maxv) ve.push_back({x,y,maxv}); } int main(void) {cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>a[i][j];for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){s1[i][j]=s1[i][j-1];if(a[i][j]=='*') s1[i][j]++;}}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){s2[i][j]=s2[i][j-1];if(a[j][i]=='*') s2[i][j]++;}}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(a[i][j]=='*') solve(i,j);bool flag=0;for(int i=0;i<ve.size();i++){int x=ve[i].x,y=ve[i].y,len=ve[i].z;for(int j=x-len;j<=x+len;j++) a[j][y]='.';for(int j=y-len;j<=y+len;j++) a[x][j]='.';}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) if(a[i][j]=='*') flag=1;if(!flag){cout<<ve.size()<<endl;for(int i=0;i<ve.size();i++) printf("%d %d %d\n",ve[i].x,ve[i].y,ve[i].z);} else puts("-1");return 0; }E2. Stars Drawing (Hard Edition)【前綴和】
#include<bits/stdc++.h> using namespace std; const int N=1010; char a[N][N]; int s1[N][N],s2[N][N],n,m; struct node{int x,y,z;}; vector<node>ve; void solve(int x,int y) {int maxv=0;for(int len=min(n,m);len>=1;len--){int l1=x-len,r1=x+len;int l2=y-len,r2=y+len;if(l1<1||r1>n||l2<1||r2>m) continue;int sum1=s1[x][r2]-s1[x][l2-1];int sum2=s2[y][r1]-s2[y][l1-1];int temp=len*2+1;if(sum1==temp&&sum2==temp){maxv=max(maxv,len);break;}}if(maxv) ve.push_back({x,y,maxv}); } int main(void) {cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>a[i][j];for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){s1[i][j]=s1[i][j-1];if(a[i][j]=='*') s1[i][j]++;}}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){s2[i][j]=s2[i][j-1];if(a[j][i]=='*') s2[i][j]++;}}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(a[i][j]=='*') solve(i,j);bool flag=0;for(int i=0;i<ve.size();i++){int x=ve[i].x,y=ve[i].y,len=ve[i].z;for(int j=x-len;j<=x+len;j++) a[j][y]='.';for(int j=y-len;j<=y+len;j++) a[x][j]='.';}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) if(a[i][j]=='*') flag=1;if(!flag){cout<<ve.size()<<endl;for(int i=0;i<ve.size();i++) printf("%d %d %d\n",ve[i].x,ve[i].y,ve[i].z);} else puts("-1");return 0; }F. Bracket Substring【DP未完結】
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Codeforces Round #501 (Div. 3)【未完结】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Acwing第 41 场周赛【完结】
- 下一篇: Codeforces Beta Roun