题目中说只需按照所给顺序,不论起点,输出能连续旅游的最多的城市
就是不论起点这句,我就卡住了。。
看了别人的题解,循环个2n-1次便是把所有的起点都考虑进去了。
更详细的解释在代码的注释里。
1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 const int maxn = 100000 + 10; 8 int city[maxn]; 9 10 int main(void) 11 { 12 #ifdef LOCAL 13 freopen("1422in.txt", "r", stdin); 14 #endif 15 16 int i, n, a, b, cnt, Max, sum; 17 while(scanf("%d", &n) == 1) 18 { 19 for(i = 0; i < n; ++i) 20 { 21 scanf("%d%d", &a ,&b); 22 city[i] = a - b; 23 } 24 sum = cnt = 0; 25 Max = -1; 26 for(i = 0; i < n*2-1; ++i) 27 { 28 sum += city[i%n]; 29 if(sum >= 0) 30 { 31 ++cnt; 32 if(Max < cnt) 33 Max = cnt; //更新Max的值 34 if(Max == n) //最多把n个城市旅游个遍 35 break; 36 } 37 else 38 cnt = sum = 0; //生活费不够了只能将所游览的城市的个数 39 //和总生活费归为零 40 } 41 printf("%d ", Max); 42 } 43 return 0; 44 }