2017 Multi-University Training Contest

来源:互联网 发布:mac phpstorm debug 编辑:程序博客网 时间:2024/06/03 18:16

http://acm.hdu.edu.cn/showproblem.php?pid=6140


题意:

  给出n,k,表示有n个数,有对应的N,L,D,初始值为0N代表这个数可正可负,L为正,D为负,第一个值是确定的,问是否可以选择一些数,使其等于k

思路:

  我们最开始得到1,0,1,即[1,1]这区间任意数可达到,对于[a,b]这区间,如果加上一个正数x,那么[a,b+]x这区间任意一个数也可以得到,负数同理。

代码:

#include<bits/stdc++.h>using namespace std;#define ll long longll a[10005];int main(){    ll T;    ll n,k;    char ch;    while(~scanf("%lld",&T)){        while(T--){            scanf("%lld %lld",&n,&k);            for(ll i = 0;i < n;i++){                scanf("%lld",&a[i]);            }            ll l = -1,r = 1;            for(ll i = 0;i < n;i++){                getchar();                scanf("%c",&ch);                if(ch == 'N'){                    l -= a[i];                    r += a[i];                }else if(ch == 'L'){                    r += a[i];                }else if(ch == 'D'){                    l -= a[i];                }            }            if(k >= l && k <= r){                puts("yes");            }else{                puts("no");            }        }    }}
原创粉丝点击