HDU 6140 Hybrid Crystals(思维)

来源:互联网 发布:有道在线翻译软件下载 编辑:程序博客网 时间:2024/06/05 10:49

Hybrid Crystals

  Problem Description

 Given n crystals' energy levels ai and types bi (1in), bi=N means the i-th crystal is a neutral one, bi=L means a Light one, and bi=D means a Dark one. The Jedi Council asked you to choose some crystals to form a larger hybrid crystal. To make sure it is stable, the final energy level (the sum of the energy emission of all chosen crystals) of the hybrid crystal must be exactly k.

Considering the NP-Hardness of this problem, the Jedi Council puts some additional constraints to the array such that the problem is greatly simplified.

First, the Council puts a special crystal of a1=1,b1=N.

Second, the Council has arranged the other n1 crystals in a way that
aij=1i1aj[bj=N]+j=1i1aj[bi=Lbj=L]+j=1i1aj[bi=Dbj=D](2in).

[cond] evaluates to 1 if cond holds, otherwise it evaluates to 0.

For those who do not have the patience to read the problem statements, the problem asks you to find whether there exists a set S{1,2,,n} and values si for all iS such that

iSaisi=k,


where si=1 if the i-th crystal is a Light one, si=1 if the i-th crystal is a Dark one, and si{1,1} if the i

-th crystal is a neutral one.

Input
The first line of the input contains an integer T, denoting the number of test cases.

For each test case, the first line contains two integers n (1n103) and k (|k|106). 

The next line contains n integer a1,a2,...,an (0ai103).

The next line contains n character b1,b2,...,bn (bi{L,D,N}).
 

Output
If there exists such a subset, output "yes", otherwise output "no".
 

Sample Input
25 9 1 1 2 3 4N N N N N 6 -101 0 1 2 3 1N L L L L D
 

Sample Output
yesno
 

Source
2017 Multi-University Training Contest - Team 8


题解:

这道题中的数能组成的数构成了一个连续区间.

一开始只有 a_1a1 的时候能够构成 [-1, 1][1,1] 中的所有整数.

如果一堆数能够构成 [-a, b][a,b] 中的所有整数, 这时候来了一个数 xx. 如果 xx 只能取正值的话, 如果有 x \le bxb, 那么就能够构成 [-a, b+x][a,b+x] 的所有整数.

如果 xx 只能取负值, 如果有 x \le yxy, 那么就能构成 [-a-x, b][ax,b] 的所有整数.

如果 xx 可正可负, 如果有 x \le min(x, y)xmin(x,y), 那么就能构成 [-a-x, b+x][ax,b+x] 中的所有整数.

然后题目中那个奇怪的不等式就保证了上面的"如果有"的条件.


#include<iostream>#include<stdio.h>using namespace std;int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n,k;        int a[1005];        scanf("%d%d",&n,&k);        int l=-1,h=1;        for(int i=0;i<n;i++)            scanf("%d ",&a[i]);        char s[2];        for(int i=0;i<n;i++)        {            scanf("%s",s);            if(i==0) continue;            if(s[0]=='N')            {                l-=a[i];                h+=a[i];            }            else if(s[0]=='D')            {                l-=a[i];            }            else h+=a[i];        }        if(l<=k&&h>=k)            cout<<"yes\n";        else cout<<"no\n";    }    return 0;}





原创粉丝点击