暴力过了,最大点1.00s
#include<iostream>
#include<cstdio>
using namespace std;
long long n,a[50005],b[50005],s;
inline long long read()
{
long long s=0,c=0;
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();}
return s;
}
inline void out(int x)
{
if(x>=10)out(x/10);
putchar(x%10+'0');
}
int main()
{
n=read();
for(register int i=1;i<=n;++i)
a[i]=read(),b[i]=read();
for(register int i=1;i<=n;++i)
{
s=1;
for(register int j=i+1;j<=n;j+=5)
{
if((a[j]-b[i])*(b[j]+b[i])==a[j]*b[i]+a[i]*b[j])
{
--s;
out(j);putchar('\n');
break;
}
if((a[j+1]-b[i])*(b[j+1]+b[i])==a[j+1]*b[i]+a[i]*b[j+1]&&j+1<=n)
{
--s;
out(j+1);putchar('\n');
break;
}
if((a[j+2]-b[i])*(b[j+2]+b[i])==a[j+2]*b[i]+a[i]*b[j+2]&&j+2<=n)
{
--s;
out(j+2);putchar('\n');
break;
}
if((a[j+3]-b[i])*(b[j+3]+b[i])==a[j+3]*b[i]+a[i]*b[j+3]&&j+3<=n)
{
--s;
out(j+3);putchar('\n');
break;
}
if((a[j+4]-b[i])*(b[j+4]+b[i])==a[j+4]*b[i]+a[i]*b[j+4]&&j+4<=n)
{
--s;
out(j+4);putchar('\n');
break;
}
}
if(s==1)printf("-1\n");
}
return 0;
}