HDU 6140 Hybrid Crystals

题意:这个题其实是题意很麻烦,这个题目上有很长的等式,这个等式我们仔细观察我们可以发现,这其实是由3部分组成的,每一部分是关于N,L,和D的,我们可以拆成三个等式看,代表的意思就是,每次加入的新区间的长度,都小于之前区间的长度,但是题目中指出,我们的第一个数是唯一的,所以我们可以的到一个-1,0,1的区间(0是代表第一个数不选的意思,所以就得到了0)这样我们每次扩展的都比之前所拥有的的区间长度小, 所以我们只用记录最小值和最大值就可以了

代码;

#include <bits/stdc++.h>
using namespace std;

const int maxn=3005;
int a[maxn];
char ch[maxn];

int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
        int n,k;
        scanf("%d%d",&n,&k);
        int l=-1,r=1;
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)cin>>ch[i];
        for(int i=2;i<=n;i++){
            if(ch[i]=='N'){
                l-=a[i];r+=a[i];
            }
            else if(ch[i]=='L'){
                r+=a[i];
            }
            else{
                l-=a[i];
            }
        }
        if(l<=k&&k<=r){
            puts("yes");
        }
        else{
            puts("no");
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/lalalatianlalu/p/9256872.html