HDU 1422 重温世界杯

时间:2022-07-29 08:45:50

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

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

看了别人的题解,循环个2n-1次便是把所有的起点都考虑进去了。

更详细的解释在代码的注释里。

 //#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = + ;
int city[maxn]; int main(void)
{
#ifdef LOCAL
freopen("1422in.txt", "r", stdin);
#endif int i, n, a, b, cnt, Max, sum;
while(scanf("%d", &n) == )
{
for(i = ; i < n; ++i)
{
scanf("%d%d", &a ,&b);
city[i] = a - b;
}
sum = cnt = ;
Max = -;
for(i = ; i < n*-; ++i)
{
sum += city[i%n];
if(sum >= )
{
++cnt;
if(Max < cnt)
Max = cnt; //更新Max的值
if(Max == n) //最多把n个城市旅游个遍
break;
}
else
cnt = sum = ; //生活费不够了只能将所游览的城市的个数
//和总生活费归为零
}
printf("%d\n", Max);
}
return ;
}

代码君