http://acm.hdu.edu.cn/showproblem.php?pid=6140
題目大意:先給你一個數字n和一個整數k,再給你n個數字和對應的一些英文字母,’N’表示這個數字可正可負。‘L’代表這個數字只能是正的,‘D’代表這個數字只能是負的,如果這些數字的和可以等於k就輸出yes否則就輸出no。
解題思路:根據基本的數學知識,只要這些數字的和最大值和最小值,只要這個k介於這兩個數字之間就輸出yes否則輸出no。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T,n,k,a[1110];scanf("%d",&T);
char b[1110];
while(T--){
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
cin>>b[i];
int lsum = 0,dsum = 0;///lsum記錄最大值,dsum記錄最小值
for(int i=0;i<n;i++)
if(b[i]=='L'||b[i]=='N')
lsum+=a[i];
for(int i=0;i<n;i++)
if(b[i]=='D'||b[i]=='N')
dsum+=(-a[i]);
if(k>0){///如果k是正數的話就和最大值比
if(lsum>=k)
printf("yes\n");
else
printf("no\n");
}
else{///如果k是負數的話就和最小值比
if(dsum<=k)
printf("yes\n");
else
printf("no\n");
}
}
return 0;
}