Codeforces Round #536 (Div. 2)
Posted kanoon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #536 (Div. 2)相关的知识,希望对你有一定的参考价值。
Codeforces Round #536 (Div. 2)
A. Lunar New Year and Cross Counting
模拟,可以外加两行两列防止越界。
#include <bits/stdc++.h> using namespace std; int dir[4][2]={{-1,-1},{-1,1},{1,-1},{1,1}}; int main() { int n;cin>>n; char MP[n+2][n+2]={0}; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>MP[i][j]; int cnt=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(MP[i][j]==‘X‘){ bool flag=true; for(int k=0;k<4;k++){ int x=i+dir[k][0]; int y=j+dir[k][1]; if(MP[x][y]!=‘X‘) flag=false; } if(flag) ++cnt; } cout<<cnt<<" "; return 0; }
B. Lunar New Year and Food Ordering
模拟,构造结构体按题意排序,将排序后下标与原下标建立映射,另需记录已售完的最小下标避免重复遍历导致超时。
#include <bits/stdc++.h> using namespace std; typedef long long ll; struct DISH{ int a,c,num; }; int main() { int n,m;cin>>n>>m; DISH dish[n]; for(int i=0;i<n;i++) cin>>dish[i].a; for(int i=0;i<n;i++) cin>>dish[i].c; for(int i=0;i<n;i++) dish[i].num=i+1; sort(dish,dish+n,[&](DISH a,DISH b){ return a.c==b.c?a.num<b.num:a.c<b.c; }); map<int,int> _map; for(int i=0;i<n;i++) _map[dish[i].num]=i; int zero=0; for(int _=0;_<m;_++){ int t,d;cin>>t>>d; int i=_map[t]; long long cost=0; if(dish[i].a>=d){ cost+=1LL*d*dish[i].c; dish[i].a-=d; d=0; }else{ cost+=1LL*dish[i].a*dish[i].c; d-=dish[i].a; dish[i].a=0; for(int i=zero;i<n&&d>0;i++){ int mi=min(d,dish[i].a); cost+=1LL*mi*dish[i].c; d-=mi; dish[i].a-=mi; if(dish[i].a==0) zero=i+1; } } cout<<(d>0?0:cost)<<" "; } return 0; }
C. Lunar New Year and Number Division
贪心,模拟,双指针。
#include <bits/stdc++.h> using namespace std; long long sqr(int a[],int i,int j){ return 1LL*(a[i]+a[j])*(a[i]+a[j]); } int main() { int n;cin>>n; int a[n];for(int &i:a) cin>>i; sort(a,a+n); int i=0,j=n-1; long long sum=0; while(i<j){ sum+=sqr(a,i,j); ++i,--j; } if(i==j) sum+=1LL*a[i]*a[i]; cout<<sum<<" "; return 0; }
D. Lunar New Year and a Wander
注意每个点可以重复经过,所以可以用优先队列BFS,手动线性模拟是因为不是二分插入很容易超时。
#include <bits/stdc++.h> using namespace std; const int M=1e6; vector<vector<int>> e; bool vis[M]; priority_queue<int,vector<int>,greater<int>> q;//前小后大 int main() { int n,m;cin>>n>>m; e.resize(n+1); for(int i=0;i<m;i++){ int u,v;cin>>u>>v; e[u].push_back(v); e[v].push_back(u); } q.push(1); vis[1]=true; while(!q.empty()){ int u=q.top(); q.pop(); cout<<u<<‘ ‘; for(int v:e[u]){ if(!vis[v]){ q.push(v); vis[v]=true; } } } return 0; }
以上是关于Codeforces Round #536 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #536 (Div. 2)
Codeforces Round #536 (Div. 2)
Codeforces Round #536 (Div. 2) E dp + set
Codeforces Round #536 (Div. 2) - D. Lunar New Year and a Wander(最短路)
codeforces 536a//Tavas and Karafs// Codeforces Round #299(Div. 1)
Codeforces Round #536 (Div. 2) B. Lunar New Year and Food Ordering