YTU OJ 2379:反恐精英
阿新 • • 發佈:2018-12-17
反恐精英
題目描述
17125 部隊有N 名戰士, 依次編號為1,2,3 … N, 每名戰士對應一個戰鬥力P(0<=P<=100)。為維持該部隊的正常運轉,規定每次只能派出連續編號的若干個戰士完成指定任務。兩會期間,反動勢力聚集在郊區,試圖製造恐怖事件。為維護兩會的正常開展,總司令命令17125 部隊殲滅該夥恐怖分子。已知派出戰士戰鬥力的總和需大於等於恐怖分子的總戰鬥力M 才可將其殲滅,為便於潛入敵人內部,總司令決定派遣最少數量的戰士來完成此次任務,請你幫總司令決定至少派遣多少名戰士才能完成此次任務。(假設所有戰士均可參與此次任務)
輸入
第一行給出整數T(1<=T<=10) , 表示有T 組資料。每組資料第一行兩個整數N(1<=N<=100000)表示有N 名戰士,M(0<M<100000)表示消滅敵人的戰鬥力下限,第二行給出N 個整數,第i 個數代表標號為i 的戰士的戰鬥力Pi(0<Pi<100)。
輸出
對於每組測試資料,單行輸出完成此任務至少需要的戰士數。若此任務無法完成,輸出-1。
樣例輸入
3 10 20 8 2 1 13 2 5 9 6 3 4 6 30 8 2 1 5 3 4 2 5 3 2
樣例輸出
3 -1 2
//ruler。。。
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; int a[1000001]; int main() { int n,m,i,j,k,s; int t; cin>>t; while(t--) { i=0; j=0; s=0; int minz = 1e6; cin>>n>>m; for(k=0;k<n;k++) { cin>>a[k]; } while(1) { while(j<n&&s<m) { s+=a[j++]; } if(s<m) { break; } minz = min(minz,j-i); s-=a[i++]; } if(minz==1e6) { cout<<"-1"<<endl; } else cout<<minz<<endl; } return 0; }