PAT甲级 1044 Shopping in Mars (25分)
这种狗屎的,只卡一个点,又不知道这个点是什么数据什么情况,还要自己取揣测,真难受!
本人代码附上
采用前后指针法,暴力解题!
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
int a[101000];
int main()
{
int num,sum,sums=0;
scanf("%d %d",&num,&sum);
for(int i=0;i<num;i++)
{
scanf("%d",&a[i]);
}
int q=0,q1=0,h=0,h1=0,fl=0,mins=999999,linshi,juju=1;
for(int i=0;i<num;i++)
{
if(sums<sum)
{
sums=sums+a[i];
}
if(sums>=sum)
{
h=i;
h1=i;
break;
}
}
while(q<num&&h<num)
{
if(sums<sum)
{
h++;
sums=sums+a[h];
}
if(sums>sum)
{
if(juju>0)
{
linshi=sums;
juju--;
}
if(mins>sums)
{
mins=sums;
}
q++;
sums=sums-a[q-1];
}
if(sums==sum)
{
fl++;
h++;
sums=sums+a[h];
}
}
if(fl>1){sums=sum;}else{sums=linshi;}
if(fl>0)
{while(q1<num&&h1<num)
{
if(sums<sum)
{
h1++;
sums=sums+a[h1];
}
if(sums>sum)
{
q1++;
sums=sums-a[q1-1];
}
if(sums==sum)
{
cout<<q1+1<<"-"<<h1+1<<endl;
h1++;
sums=sums+a[h1];
}
}}
else
{
while(q1<num&&h1<num)
{
if(sums<mins)
{
h1++;
sums=sums+a[h1];
}
if(sums>mins)
{
q1++;
sums=sums-a[q1-1];
}
if(sums==mins)
{
cout<<q1+1<<"-"<<h1+1<<endl;
h1++;
sums=sums+a[h1];
}
}
}
}