Epidemic in Monstropolis

CodeForces - 733C

有n条鱼排成一列,第i条鱼大小为ai,根据自然界的生存法则,相邻的两只鱼中,较大的鱼可以吃掉较小的鱼,如果两条鱼大小相等,则它们无法吃掉对方。当一条鱼i吃掉另一条鱼j后,它的体积会变成ai+aj,即获取小鱼的大小。小鱼因为消失故会在序列中被抹去。

例如,对于序列 [1, 2, 2, 2, 1, 2] ,有如下情况

  1. 第一条鱼无法吃掉任何一条鱼因为a1 = 1
  2. 第二条鱼无法吃掉第三条鱼因为 a2 = 2且 a3 = 2;
  3. 第二条鱼无法吃掉第五条鱼因为它们不相邻;
  4. 第二条鱼可以吃掉第一条鱼,吃掉以后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的更多相关文章

  1. codeforces733-C. Epidemic in Monstropolis 贪心加链表

    题意 现在有一个怪兽序列a[i],权值大的怪兽可以吃权值小的怪兽,吃完之后权值大的怪兽的权值会变成两者权值的和,相邻的怪兽才能吃 吃完之后,位置合并,队列前移,从左到右重新编号,重复这一过程, 然后给 ...

随机推荐

  1. CSS3 box-shadow 属性 紧跟在 -webkit-, -ms- 或 -moz-

    浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号. 紧跟在 -webkit-, -ms- 或 -moz- 前的数字为支持该前缀属性的第一个浏览器版本号. 语法 box-shadow: h-s ...

  2. iOS ----------将照片保存到相册

    在使用前  请导入photos.framework 然后导入 #import <Photos/PHPhotoLibrary.h> #import <Photos/PHAssetCha ...

  3. 关于MongoDB时间格式转换和时间段聚合统计的用法总结

    一 . 背景需求 在日常的业务需求中,我们往往会根据时间段来统计数据.例如,统计每小时的下单量:每天的库存变化,这类信息数据对运营管理很重要. 这类数据统计依赖于各个时间维度,年月日.时分秒都有可能. ...

  4. windows下scrapy安装问题,以及Twisted安装报错(error: Microsoft Visual C++ 14.0 is required.)完美解决办法

    方法1(通常是失败的) 1. 命令行执行: pip3 install scrapy 不管是网络问题也好,缺少相关的包也好,用这条命令安装scrapy我就没成功过...难受 方法2(成功) 手动安装相关 ...

  5. java8 快速实现List转map 、分组、过滤等操作

    利用java8新特性,可以用简洁高效的代码来实现一些数据处理. 定义1个Apple对象: public class Apple { private Integer id; private String ...

  6. win10 anaconda+tensorflow+keras

    最近想用python实现下lstm模型,然后看网上教程配置了下环境,中间出现了一些问题,记录下. 1.开始menu中anaconda文件夹下没有ipython的图标了. 我电脑里的anaconda是很 ...

  7. iOS Accessibility指南

    开发者经常会为用户开发一些令人充满惊喜的App.但是,开发者真的为每一个潜在的用户都做适配了么?是否每个人都可以真正使用你的APP呢? 设计APP.产品或者任何类型的服务,都要考虑到所有用户,包括视力 ...

  8. pymsql模块

    老师的博客地址:http://www.cnblogs.com/wupeiqi/articles/5713330.html 通过pymysql 模块可以通过朋友去操作mysql 数据库,首先的在pip上 ...

  9. Springboot配置文件解析器

    @EnableScheduling @MapperScan(value = "com.****.dao") @EnableTransactionManagement @Enable ...

  10. python 词云学习

    词云入门 三步曲 数据获取:使用爬虫在相关网站上获取文本内容 数据清洗:按一定格式对文本数据进行清洗和提取(文本分类,贴标签) 数据呈现:多维度呈现和解读数据(计算,做表,画图) 一 模块的安装 pi ...