标签:
题意:
中文。
思路:
先初步处理,用give-take求出每个城市剩的钱。
求解问题转化成使得和不小于0的最长连续字串。
枚举起点,然后当该起点加的和为负时开始枚举下一起点。(这个状态的转移)
2WA原因:
因为扩展了2倍的点使得求解的最长连续的点有可能大于n。
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; int tmp[200015]; int main() { int n,give,take; while(scanf("%d",&n)!=EOF) { int maxn=1; tmp[0]=0; for(int i=1;i<=n;i++) { scanf("%d",&give); scanf("%d",&take); tmp[i]=give-take; } for(int i=n+1;i<=2*n;i++) { tmp[i]=tmp[i-n]; } int j=1; int num=0; for(int i=1;i<=n;i++) { num-=tmp[i-1]; for(;j<=2*n;j++) { if(num<0) break; num+=tmp[j]; if(num>=0) maxn=max(j-i+1,maxn); } if(maxn>=n) break; } maxn=min(n,maxn); printf("%d\n",maxn); } }
标签:
原文地址:http://www.cnblogs.com/tun117/p/4899014.html