传送门
题意:输入n和m,n天的快乐值和羞耻度分两行给出,让你按要求选出适合的区间(连续的n天).
分析:最多有十亿组数据,所以千万不要开双层循环。那怎么找最大最小区间呢?
用前缀和记录,然后再看一个循环寻找
在这过程中就可以直接按要求筛选了。所以一定要将复杂的问题简单化
#include<stdio.h>
#include<algorithm>
using namespace std;
int inf=9999999;
long long a[1100000],b[1100000];
int main()
{
int n,m,i,flag,t;
long long maxx,minn;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&t);
if(i==1)
a[1]=t;
else a[i]=t+a[i-1];
//前缀和必须开longlong才能过,所以下边的maxx,minn要赋值也必须要开;
}
for(i=1;i<=n;i++)
{
scanf("%d",&t);
if(i==1)
b[i]=t;
else b[i]=t+b[i-1];
}
maxx=-inf;
minn=inf;
for(i=1;i<=n;i++)
{
if(a[i+m-1]-a[i-1]>maxx)
{
flag=i;
maxx=a[i+m-1]-a[i-1];
minn=b[i+m-1]-b[i-1];
}
else if(a[i+m-1]-a[i-1]==maxx&&b[i+m-1]-b[i-1]<minn)
{
flag=i;
minn=b[i+m-1]-b[i-1];
}
}
printf("%d\n",flag);
}