Codeforces 733C Epidemic in Monstropolis
2016-11-01 19:32
471 查看
思路:
先把你给个队列分成k段,每段的和与最终的队列一一对应,然后找到每段的最大值(且左或右右有比他小的),可以发现,先叫他吃了旁边比他小的,然后就一定是最大的了,这样一直叫这个怪兽吃旁边的就好了。
大致说下为什么可以这样:
首先要能让那一段最终变成一只怪兽,每个ai都一样肯定是不行的,所以一定有一个最大以及旁边有个比他小的。
先把你给个队列分成k段,每段的和与最终的队列一一对应,然后找到每段的最大值(且左或右右有比他小的),可以发现,先叫他吃了旁边比他小的,然后就一定是最大的了,这样一直叫这个怪兽吃旁边的就好了。
大致说下为什么可以这样:
首先要能让那一段最终变成一只怪兽,每个ai都一样肯定是不行的,所以一定有一个最大以及旁边有个比他小的。
#include<bits/stdc++.h> using namespace std; #define mod 1000000007 #define PI acos(-1.0) #define INF 0x3f3f3f3f typedef long long LL; typedef unsigned long long ULL; const int maxn=510; vector<LL>v[maxn]; vector<pair<int,int> >ans; LL a[maxn],b[maxn]; int n,k; int main() { LL x,y; x=y=0; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%I64d",a+i); x+=a[i]; } scanf("%d",&k); for(int i=1;i<=k;i++){ scanf("%I64d",b+i); y+=b[i]; } if(x!=y){ printf("NO\n"); return 0; } int cnt=1; LL sum=0; for(int i=1;i<=n;i++){ v[cnt].push_back(a[i]); sum+=a[i]; if(sum==b[cnt]){ cnt++; sum=0; } else if(sum>b[cnt]){ printf("NO\n"); return 0; } } if(cnt!=k+1){ printf("NO\n"); return 0; } for(int i=1;i<=k;i++){ if(v[i].size()==1)continue ; LL t=v[i][0]; LL mx=t; int ok=0; for(int j=1;j<v[i].size();j++){ if(t!=v[i][j]){ ok=1; } mx=max(mx,v[i][j]); } if(!ok){ printf("NO\n"); return 0; } int pos=-1; int lr=0; for(int j=0;j<v[i].size()-1;j++){ if(v[i][j]==mx&&v[i][j+1]!=mx){ pos=j; lr=1; break; } } if(!lr){ for(int j=v[i].size()-1;j>0;j--){ if(v[i][j]==mx&&v[i][j-1]!=mx){ pos=j; lr=-1; break; } } } if(lr==1){ for(int j=pos+1;j<v[i].size();j++){ ans.push_back(make_pair(pos+i,1)); } for(int j=pos-1;j>=0;j--){ ans.push_back(make_pair(j+i+1,-1)); } } else { for(int j=pos-1;j>=0;j--){ ans.push_back(make_pair(j+i+1,-1)); } for(int j=pos+1;j<v[i].size();j++){ ans.push_back(make_pair(i,1)); } } } printf("YES\n"); for(int i=0;i<ans.size();i++){ printf("%d ",ans[i].first); if(ans[i].second==-1){ printf("L\n"); } else { printf("R\n"); } } return 0; }
相关文章推荐
- codeforces 733C Epidemic in Monstropolis 贪心
- CodeForces 733C Epidemic in Monstropolis
- CodeForces - 733C Epidemic in Monstropolis (模拟乱搞)
- 【Codeforces 733C】 Epidemic in Monstropolis 【贪心】
- 【16.52%】【codeforces 733C】Epidemic in Monstropolis
- CodeForces 733C Epidemic in Monstropolis 暴搜+树状数组做法
- CodeForces 733C - Epidemic in Monstropolis
- Codeforces 733C Epidemic in Monstropolis 构造+思维
- [codeforces] C. Epidemic in Monstropolis 复杂模拟
- CodeForces 733 C.Epidemic in Monstropolis(贪心)
- 【codeforces 733 C】【模拟】C. Epidemic in Monstropolis【给你n个数,再给你k个数,问你a序列能否通过一定规则合并变成b序列】
- Codeforces Round #378 (Div. 2)C. Epidemic in Monstropolis
- Codeforces Round #378 (Div. 2) C. Epidemic in Monstropolis 模拟
- Codeforces Round #378 (Div. 2) C. Epidemic in Monstropolis(模拟)
- Codeforces Round #378 (Div. 2) C Epidemic in Monstropolis
- codeforces-733C-greedy
- Codeforces Round #378 (Div. 2) -- C. Epidemic in Monstropolis (贪心模拟)
- Epidemic in Monstropolis
- Codeforces Round #378 (Div. 2)-C. Epidemic in Monstropolis
- Codeforces#378 div.2 C. Epidemic in Monstropolis