题目:点击打开链接
题意:就是给定一个序列。序列的每个值都有属性,N代表可加可减,L代表只能加,D代表只能减,当然这些都可以用或者不用。给定一个k,问k是否可能用这个序列构成。
解题思路:就是分别向两边扩展区间,看是否在这个区间里,真的是,这是什么题,真的坑,!!!!!
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[1005];
char ch[1005];
int T;
scanf("%d",&T);
while(T--)
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
for(int j=1; j<=n; j++)
{
getchar();
scanf("%c",&ch[j]);
}
int l=0,r=0;
for(int i=1; i<=n; i++)
{
if(ch[i]=='N')
{
l-=a[i];
r+=a[i];
}
if(ch[i]=='D')
l-=a[i];
if(ch[i]=='L')
r+=a[i];
}
//cout<<l<<" "<<r<<endl;
if(k>=l&&k<=r)
printf("yes\n");
else
printf("no\n");
}
return 0;
}