Codeforces 733C Epidemic in Monstropolis
来源:互联网 发布:淘宝客服兼职靠谱吗 编辑:程序博客网 时间:2024/05/05 02:20
题目大意:有n只怪兽排成一列,体重大的可以吃掉相邻体重比他小的,吃掉后,体重便会相应地增加。给定初始怪兽和目标状态怪兽体重,问是否可能达成目标状态。可能输出“”YES“和步骤,不可能输出“NO”。
因为只能吃相邻的,所以目标状态肯定是由初始状态的连续子段和组成。那么遍历目标状态的各体重,判断能否由初始状态到达,即检查是否初始状态有连续子段的和等于该体重。若有连续子段等于该目标体重,那么是否一定能达到呢?可以发现,只要连续子段中各体重不全相等或者连续子段长度等于1,那么一定通过“一直向左吃之后一直向右吃”或者“一直向右吃之后一直向左吃”达到。
至于步骤的输出,遍历检查时记下各目标体重对应的连续子段的左右端点,在通过以上方法“吃”即可。
那么“吃“的起始点该怎么找呢?率先开吃的怪兽应该满足以下条件:1)它的体重是最重的,2)它的两边至少存在一个比它轻的。这两个条件保证了它这一次有的吃,而且吃完后还是最重的。
另外“NO”的判断,要注意吃完还有多余的怪兽,以及怪兽不够吃均是“NO”。
#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxn=500+15;int sum[maxn];int n, m, a[maxn], b[maxn];int l[maxn], r[maxn];bool can(int s,int t){ int val=a[s]; for(int i=s;i<=t;i++) if(a[i]!=val) return true; if(t==s) return true; return false;}void make(int cnt,int l,int r){ int pos=l; for(int i=l;i<=r;i++) if(a[i]>a[pos]) pos=i; else if(a[i]==a[pos]){ if(pos==l) pos=i; else if(a[pos-1]==a[pos]&&a[pos]==a[pos]) pos=i; }// printf("pos=%d\n",pos); if(pos==l||a[pos]==a[pos-1]){ for(int i=pos;i<r;i++) printf("%d R\n",cnt+pos-l+1); for(int i=pos;i>l;i--) printf("%d L\n",cnt+i-l+1); }else{ for(int i=pos;i>l;i--) printf("%d L\n",cnt+i-l+1); for(int i=pos;i<r;i++) printf("%d R\n",cnt+1); }}int main(){ int no_ans=0; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i]; } scanf("%d",&m); for(int i=1;i<=m;i++) scanf("%d",&b[i]); int i=1, j; for(j=1;j<=m;j++){ int t=i; while(t<=n&&sum[t]-sum[i-1]<b[j]) t++; if(t>n||sum[t]-sum[i-1]!=b[j]||!can(i,t)){ no_ans=1; break; } if(j==m&&t!=n){ no_ans=1; break; } l[j]=i, r[j]=t; i=t+1; } if(no_ans) puts("NO"); else{ puts("YES"); for(j=1;j<=m;j++) make(j-1,l[j],r[j]); } return 0;}
0 0
- 【Codeforces 733C】 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 733C - Epidemic in Monstropolis
- 【Codeforces 733 C. Epidemic in Monstropolis】+ 模拟
- Codeforces 733C Epidemic in Monstropolis
- Codeforces 733C Epidemic in Monstropolis 构造+思维
- CodeForces 733C Epidemic in Monstropolis 暴搜+树状数组做法
- Codeforces 733 C. Epidemic in Monstropolis By Assassin
- CodeForces 733 C.Epidemic in Monstropolis(贪心)
- [codeforces] C. Epidemic in Monstropolis 复杂模拟
- codeforces #378C(733.C) Epidemic in Monstropolis
- Codeforces Round #378 (Div. 2)-C. Epidemic in Monstropolis
- Codeforces Round #378 (Div. 2)C. Epidemic in Monstropolis
- codeforces 773C Epidemic in Monstropolis(贪心?构造?模拟?乱搞!)
- Codeforces Round #378 (Div. 2) C. Epidemic in Monstropolis
- linux统一设备模型
- 解释一下关系数据库的第一第二第三范式?
- [UWP]依赖属性2:使用依赖属性
- ATT层容器结构
- react-native-lagou
- Codeforces 733C Epidemic in Monstropolis
- PAT.Basic Level. T.1009.说反话
- ZOJ 3710 Friends
- SSH学习(十)Hibernate常用API详解及源码分析
- python
- iOS之获取照片和相机、定位权限的判断
- jsp 获取两个数值直接用大于、小于比较大小和算加法,不是按数字大小比较,JSP都是以字符串在操作
- 关于登录功能的测试总结
- ArrayMap的使用与详解