B. Books(水题)
题意:
Valera要在n本书中读连续的书,并且有时间限制t。每本书对应了时间a[i],求Valera最多能读多少本书。
题解:
用双指针? 当时间充足的情况下,从第1本开始计数(读),当时间耗尽时,从第1本开始放弃(不读),接着读后面的书。
存储最大值。
ACcode:
int main() { int n, t; int sum = 0,minn=100000; int book[100010]; int ans = 0, num = 0; int maxx = -inf; cin >> n >> t; for (int i = 0; i < n; i++) { cin >> book[i]; sum += book[i]; minn = min(minn, book[i]); }
//特判两种情况,时间可以读完所有书,时间不够读一本书。 if (sum <= t)cout << n << endl; else if (t < minn)cout << 0 << endl;//其实好像不用特判emmmmm else { int j = 0; for (int i = 0; i < n; i++) { ans += book[i];//时间充足时,读书。 while (ans > t) { ans -= book[j]; j++; }//当时间不足时,去掉前面的书(不读) //cout << i << " " << j << endl; maxx = max(maxx, i - j+1 ); } cout << maxx << endl; } return 0; }