hdu 6140 Hybrid Crystals(數學+思維)

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;
}
發佈了105 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章