RIDDLE - Bí hiểm
Tác giả: RR
Ngôn ngữ: C++
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <iomanip>
#include <bitset>
#include <complex>
#define FOR(i,a,b) for(int i = a; i <= b; ++i)
#define FORD(i,a,b) for(int i = a; i >= b; --i)
#define REP(i,a) for(int i = 0; i < a; ++i)
#define MP make_pair
#define PB push_back
using namespace std;
int cnt[100111], a[100111];
int main() {
int ntest; scanf("%d", &ntest);
while (ntest--) {
int n, k; scanf("%d%d", &n, &k);
int can = 0;
FOR(i,1,n) scanf("%d", &a[i]);
memset(cnt, 0, sizeof cnt);
bool ok = false;
FOR(i,1,n) {
if (a[i] > can + 1) {
++cnt[a[i]];
continue;
}
int save = can;
can += a[i];
for(int x = save + 1; x <= can + 1 && x <= 100001; ++x)
can += cnt[x] * x;
if (can >= k) {
ok = true;
printf("%d\n", i);
break;
}
}
if (!ok) puts("-1");
}
return 0;
}