注解
1、类似于非负字段和。生活费减去花费就是结余,从头开始遍历,直到某个城市,钱花完了,就得到可以参观的城市数。在线遍历一轮后,就可以得到参观城市数的最大值。
代码
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 200010;
int remind[MAXN];
int main() {
int n;
while(cin>>n){
memset(remind, 0, sizeof(remind));
for(int i=0; i<n; i++){
int a, b;
scanf("%d %d", &a, &b);
remind[i] = a-b;
remind[i+n] = a-b;
}
int sum = 0;
int num = 0;
int ans = -1;
for(int i=0; i<2*n; i++){
sum += remind[i];
num++;
if(sum<0){
sum = 0;
num = 0;
}
if(num>n){
break;
}
if(num>ans){
ans = num;
}
}
printf("%d\n", ans);
}
return 0;
}