hdu 6140 Hybrid Crystals(数学+思维)

来源:互联网 发布:易语言软件自动更新 编辑:程序博客网 时间:2024/06/04 19:02

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;}
原创粉丝点击