当前位置 : 主页 > 手机开发 > 其它 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-12
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;
}
网友评论