CodeForces 733 C.Epidemic in Monstropolis(贪心)
来源:互联网 发布:sql query language 编辑:程序博客网 时间:2024/05/18 17:58
Description
一排n个怪兽,每个怪兽有一个重量,如果一只怪兽大于其相邻的一只重量比它小的怪兽那么就可以吃掉这只怪兽并合并其重量,一秒只会有一只怪兽吃掉旁边的怪兽,给出n-k秒后的k只怪兽重量,问是否存在一种合法的合并方案能够使得这n只怪兽变成k只怪兽
Input
第一行一整数n表示初始状态怪兽数量,之后n个整数a[i]表示第i只怪兽的重量,然后输入一整数k表示最后怪兽数量,之后k个整数b[i]表示第i只怪兽的重量(1<=k<=n<=500,1<=a[i]<=1e6,1<=b[i]<=5e8)
Output
如果存在合法方案,则按时间顺序输出每一秒哪一只怪兽吃了左边相邻怪兽还是右边相邻怪兽,否则输出NO
Sample Input
6
1 2 2 2 1 2
2
5 5
Sample Output
YES
2 L
1 R
4 L
3 L
Solution
如果合法,那么就是把a序列分成k段,然后每一段段和等于b序列的一个元素,且每一段内存在一种合法方案使得能够变成一只怪兽,所以从左到右给a分段,如果分不成一段则无解,否则对于每一段每次拿重量最大的怪兽吃旁边的怪兽,如果没有能吃的就无解
Code、
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define maxn 1111int n,k,a[maxn],b[maxn],c[maxn],gg;typedef pair<int,int>P;vector<P>ans;void solve(int l,int r,int plus){ if(l==r)return ; for(int i=l;i<=r;i++)c[i-l+1]=a[i]; int m=r-l+1; for(int k=1;k<=r-l;k++) { int pos=1; for(int i=1;i<=m;i++) { if(c[i]>c[pos])pos=i; else if(c[i]==c[pos]) { if(i<m&&c[i+1]<c[i]||i>1&&c[i-1]<c[i]) pos=i; } } if(pos==m) { if(c[m-1]==c[m]) { gg=1; return ; } c[m-1]+=c[m]; ans.push_back(P(m+plus,0)); } else if(pos==1) { if(c[1]==c[2]) { gg=1; return ; } c[2]+=c[1]; for(int i=1;i<m;i++)c[i]=c[i+1]; ans.push_back(P(1+plus,1)); } else { if(c[pos-1]<c[pos]) { c[pos]+=c[pos-1]; for(int i=pos-1;i<m;i++)c[i]=c[i+1]; ans.push_back(P(pos+plus,0)); } else if(c[pos+1]<c[pos]) { c[pos]+=c[pos+1]; for(int i=pos+1;i<m;i++)c[i]=c[i+1]; ans.push_back(P(pos+plus,1)); } else { gg=1; break; } } m--; }}int main(){ while(~scanf("%d",&n)) { ans.clear(); for(int i=1;i<=n;i++)scanf("%d",&a[i]); scanf("%d",&k); for(int i=1;i<=k;i++)scanf("%d",&b[i]); gg=0; int j=1,num=0; for(int i=1;i<=k;i++) { if(gg)break; int pre=j; while(j<=n&&num<b[i])num+=a[j],j++; if(num>b[i]|| j==n+1&&num<b[i]) { gg=1; break; } solve(pre,j-1,i-1); num=0; } if(j!=n+1)gg=1; printf("%s\n",gg?"NO":"YES"); if(!gg) for(int i=0;i<ans.size();i++) printf("%d %c\n",ans[i].first,ans[i].second?'R':'L'); } return 0;}
0 0
- 【Codeforces 733C】 Epidemic in Monstropolis 【贪心】
- codeforces 733C Epidemic in Monstropolis 贪心
- CodeForces 733 C.Epidemic in Monstropolis(贪心)
- 【16.52%】【codeforces 733C】Epidemic in Monstropolis
- Codeforces 733C Epidemic in Monstropolis
- 733C. Epidemic in Monstropolis codeforces(模拟)
- CodeForces 733C - Epidemic in Monstropolis
- 【Codeforces 733 C. Epidemic in Monstropolis】+ 模拟
- Codeforces 733C Epidemic in Monstropolis
- codeforces 773C Epidemic in Monstropolis(贪心?构造?模拟?乱搞!)
- Codeforces Round #378 (Div. 2) -- C. Epidemic in Monstropolis (贪心模拟)
- Codeforces 733C Epidemic in Monstropolis 构造+思维
- CodeForces 733C Epidemic in Monstropolis 暴搜+树状数组做法
- Codeforces 733 C. Epidemic in Monstropolis By Assassin
- [codeforces] C. Epidemic in Monstropolis 复杂模拟
- 模拟(Epidemic in Monstropolis,cf 733C)
- Codeforces Round #378 (Div. 2) C. Epidemic in Monstropolis 贪心+构造
- codeforces #378C(733.C) Epidemic in Monstropolis
- canvas 裁剪签名图片 去除多余的空白
- gcj d题 Fashion Show 二分匹配
- Android UI 窗口体系 —— 源码阅读
- Springmvc3+Spring3+Freemarker整合异常
- 大数据分析挖掘培训课程要点及大纲
- CodeForces 733 C.Epidemic in Monstropolis(贪心)
- jQuery之知识二-选择器
- 南阳 oj 题目27 水池数目
- Linux等待队列
- 关于对String的编解码String(byte[] bytes, Charset charset)的理解
- 2 Spring的组成
- maven环境搭建(笔记)
- Ultrahaptics公司为Holodeck型触觉关闭了2300万美元的资金回合
- Zookeeper(一)伪分布式安装