codeforces733C
Epidemic in Monstropolis
有n条鱼排成一列,第i条鱼大小为ai,根据自然界的生存法则,相邻的两只鱼中,较大的鱼可以吃掉较小的鱼,如果两条鱼大小相等,则它们无法吃掉对方。当一条鱼i吃掉另一条鱼j后,它的体积会变成ai+aj,即获取小鱼的大小。小鱼因为消失故会在序列中被抹去。
例如,对于序列 [1, 2, 2, 2, 1, 2] ,有如下情况
- 第一条鱼无法吃掉任何一条鱼因为a1 = 1
- 第二条鱼无法吃掉第三条鱼因为 a2 = 2且 a3 = 2;
- 第二条鱼无法吃掉第五条鱼因为它们不相邻;
- 第二条鱼可以吃掉第一条鱼,吃掉以后a序列更新为 [3, 2, 2, 1, 2].
假设过了一段时间以后,原来的n条鱼只剩下 k (k ≤ n) 条, 第 j 条鱼大小为 bj.
试推导出一个合法的吃鱼顺序,使得a序列转变为b序列,若无法推导,输出NO。
Input
第一行一个整数n (1 ≤ n ≤ 500)
第二行n个整数 a1, a2, ..., an (1 ≤ ai ≤ 106)
第三行一个整数 k (1 ≤ k ≤ n)
第四行k个整数 b1, b2, ..., bk (1 ≤ bj ≤ 5·108)
Output
若无解,输出 "NO"
若有解,第一行输出 "YES".
接下来 n - k 行描述吃鱼的全部过程. 每行包含一个数字x和一个字符c。x表示序列中的第几条鱼,c表示吃的是左边还是右边的鱼,左边则c为'L',右边则c为'R'
要注意,每次吃掉一条鱼后,序列的长度会减1。
若有多组解,任意输出一组。
Example
Input
6
1 2 2 2 1 2
2
5 5
Output
YES
2 L
1 R
4 L
3 L
Input
5
1 2 3 4 5
1
15
Output
YES
5 L
4 L
3 L
2 L
Input
5
1 1 1 3 3
3
2 1 6
Output
NO
sol:略显蛋疼的模拟题,首先容易发现吃出来的大鱼一定是吃了连续的一段,所以每个bi可以对应a中的一段,但是因为每次吃一条鱼都会使得序列长度减1,然后就需要模拟了,一开始感觉可以用树状数组维护坐标,但是写了一会就放弃了,直接暴力吃暴力更新整段数组又不是不行(o(╥﹏╥)o)
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=; inline void F5(int x,int opt);
inline void Debug();
inline bool Solve(int l,int r); int n,m;
int a[N],b[N],c[N],d[N];
int ans[N],Fx[N];
inline void F5(int x,int opt)
{
a[x]+=a[x+opt];
a[x+opt]=;
memset(c,,sizeof c);
memmove(c,a,sizeof c);
memset(a,,sizeof a);
int i,cnt=;
for(i=;i<=n;i++) if(c[i])
{
a[++cnt]=c[i];
}
}
inline void Debug()
{
int i;
for(i=;i<=n;i++) W(a[i]);
puts("");
}
inline bool Solve(int l,int r)
{
if(l==r) return true;
int i,Now=;
bool Flag=;
for(i=l+;i<=r;i++) if(a[i]!=a[i-]) {Flag=; break;}
if(!Flag) return false;
for(i=l;i<=r;i++)
{
if(a[i]>a[Now]) Now=i;
else if(a[i]==a[Now]&&((i<r&&a[i]>a[i+])||(i>l&&a[i]>a[i-]))) Now=i;
}
int cnt=r-l+,Sum=a[Now];
while(cnt>)
{
if(Now>l&&Sum>a[Now-])
{
Sum+=a[Now-];
ans[++*ans]=Now; Fx[*ans]=-;
F5(Now,-);
Now--;
}
else if(Now<r&&Sum>a[Now+])
{
Sum+=a[Now+];
ans[++*ans]=Now; Fx[*ans]=;
F5(Now,);
r--;
}
cnt--;
}
return true;
}
int main()
{
*ans=;
int i,j;
R(n);
for(i=;i<=n;i++) a[i]=read();
R(m);
for(i=;i<=m;i++) R(b[i]);
int Last=;
for(i=;i<=m;i++)
{
int Sum=;
bool Flag=;
for(j=Last;j<=n;j++)
{
Sum+=a[j];
if(Sum>b[i]) break;
if(Sum==b[i])
{
if(!Solve(Last,j)) return puts("NO"),;
Last=i+;
Flag=;
break;
}
}
if(!Flag) return puts("NO"),;
}
if(a[m+]) return puts("NO"),;
puts("YES");
for(i=;i<=*ans;i++)
{
W(ans[i]);
if(Fx[i]==-) putchar('L'); else putchar('R');
puts("");
}
return ;
}
/*
Input
6
1 2 2 2 1 2
2
5 5
Output
YES
2 L
1 R
4 L
3 L Input
5
1 2 3 4 5
1
15
Output
YES
5 L
4 L
3 L
2 L Input
5
1 1 1 3 3
3
2 1 6
Output
NO input
3
2 2 1
1
5
output
YES
2 R
2 L input
5
1 2 3 4 5
1
10
output
NO
*/
codeforces733C的更多相关文章
- codeforces733-C. Epidemic in Monstropolis 贪心加链表
题意 现在有一个怪兽序列a[i],权值大的怪兽可以吃权值小的怪兽,吃完之后权值大的怪兽的权值会变成两者权值的和,相邻的怪兽才能吃 吃完之后,位置合并,队列前移,从左到右重新编号,重复这一过程, 然后给 ...
随机推荐
- 浏览器登录Dynamics 365 CE没毛病,程序连接却报错。
摘要: 微软动态CRM专家罗勇 ,回复308或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 今天我做实验 ...
- 测者的测试技术手册:自动的自动化框架EvoSuite集成Cobertura得到可视化的代码覆盖报告
EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行.得到了Google和Yourkit的支持. ...
- ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
一.前言 1.本文主要内容 ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NE ...
- centos7 安装java运行环境
1.检测是否存在相关历史版本 shell:java-version 1.1.存在相关OpenJDK和其他版本SDK则需要删除,如图. 查看详细信息,命令窗口输入,shell:rpm -qa | gre ...
- MongoDB 3.6版本关于bind_ip设置
2017年下半年新发布的MongoDB 3.6版本在安全性上做了很大提升,主要归结为两点: 1.将将bind_ip 默认值修改为了localhost: 2. 在db.createUser()和 db. ...
- linux中Samba服务器的配置
Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件 ...
- 各种文件用JS转Base64之后的data类型
1.txt data:text/plain;base64, 2.doc data:application/msword;base64, 3.docx data:applicat ...
- c/c++ 继承与多态 容器与继承1
问题:类B公有继承类A,类A有虚函数fun,类B覆盖了虚函数fun,有一个std::vector<A>,添加A的对象a,和B的对象b,到这个容器里,然后从vector里取出来,使用对象a. ...
- Task.Wait and “Inlining”
“What does Task.Wait do?” Simple question, right? At a high-level, yes, the method achieves what its ...
- ueditor富文本编辑器使用百度地图自定义动态地图组件及兼容https及http协议
ueditor富文本编辑器默认支持百度地图组件,但是如果导入动态地图后会加很多默认的地图组件在上面.如果需要自定义动态地图的组件则需要修改ueditor特定的html. ueditor百度地图组件所在 ...