acm.hdu.edu.cn/showproblem.php?pid=6140 纪念暴零0的一天。 这道题很坑,因为题意中间说了,”For those who do not have the patience to read the problem statements”。 然而上面的是有用的。 给定一些数,有
acm.hdu.edu.cn/showproblem.php?pid=6140
纪念暴零0的一天。
这道题很坑,因为题意中间说了,”For those who do not have the patience to read the problem statements”。
然而上面的是有用的。
给定一些数,有的增加能量,有的减少能量,有的可以增加或者减少能量。问你某些个能量能否组成。
开始的想法是 分别统计 正数 和负数 背包 计数所有的情况(最大1e9),然后判断是否存在差值等于k的情况。但是这样要保存的状态有点大。。
后来队友发现上面一个式子,保证了他的数组能量的出入是有规律限制的,限制的条件就是他的 能量得到的值 是连续的。
那么。。我们只需要维护最大和最小就行了。
注意正数和负数分别判断qwq
#
include <bits/stdc++.h>
using namespace std;
int a[1005];
char b[1005];
int main()
{
int n,k;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
getchar();
for(int i=0;i<n;i++)
cin>>b[i];
int sum1=0,sum2=0;
for(int i=0;i<n;i++)
{
if(b[i]=='L')sum1+=a[i];
else if(b[i]=='D')sum2-=a[i];
else {sum1+=a[i];sum2-=a[i];}
}
//cout<<sum1<<" "<<sum2;
if(k>0){
if(k<=sum1)
puts("yes");
else
puts("no");
}
else if(k<=0){
if(k>=sum2)
puts("yes");
else
puts("no");
}
}
return 0;
}