您的位置:首页 > 其它

hdu6140-多校8&思维&坑- Hybrid Crystals

2017-08-17 20:35 387 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: