SOJ3600 Balanced Interval

来源:互联网 发布:翻墙软件 自由 编辑:程序博客网 时间:2024/05/21 23:33

2012-05-21 01:31:13 上一次的提交时间

2013-05-23 17:04:52 这次的提交时间

时隔一年,再看这条题目,仅用了3分钟就有了思路,本题可以转化为已知所有s[k](第一个数到第k个数的和),求对于每一个s[k],与其相同且距离最远的s[l],则abs(k-l)即为本题答案,代码如下,用map实现的。


#include <cstdio>#include <cstring>#include <cstdlib>#include <ctime>#include <climits>#include <cmath>#include <iostream>#include <string>#include <vector>#include <set>#include <map>#include <list>#include <queue>#include <stack>#include <deque>#include <algorithm>using namespace std;const int maxn = 100010;int T,n,s,ans;int a[maxn],b[maxn];map<int,int> f;int main(){    scanf("%d",&T);    while (T--)    {        scanf("%d",&n);        for (int i=1;i<=n;i++) scanf("%d",&a[i]);        for (int i=1;i<=n;i++) scanf("%d",&b[i]);        ans=0; s=0;        f.clear(); f[0]=0;        for (int i=1;i<=n;i++)        {            s+=a[i]-b[i];            if (f.find(s)==f.end()) f[s]=i;            else ans=max(ans,i-f[s]);        }        printf("%d\n",ans);    }return 0;}


这个编辑器居毛中啊= =