首页 > 代码库 > HDU 1422 重温世界杯

HDU 1422 重温世界杯

题目中说只需按照所给顺序,不论起点,输出能连续旅游的最多的城市

就是不论起点这句,我就卡住了。。

 

看了别人的题解,循环个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 LOCAL13         freopen("1422in.txt", "r", stdin);14     #endif15 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             else38                 cnt = sum = 0;        //生活费不够了只能将所游览的城市的个数39                                     //和总生活费归为零 40         }41         printf("%d\n", Max);42     }43     return 0;44 }
代码君