runtime error好多次,应该是没有用long long,数据不多,暴力就可以解决,选定两个点,长度定为两点的距离或其整数分割,需要注意的就是有相同坐标的树
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
using namespace std;
long long tree[50];
int main()
{
// freopen("data.txt","r",stdin);
int t,i;
cin>>t;
for(i=1;i<=t;i++)
{
int n,j;
cin>>n;
for(j=0;j<n;j++)
{
cin>>tree[j];
}
if(n<=2)
cout<<"Case #"<<i<<": "<<0<<endl;
else
{sort(tree,tree+n);
int k,a,ans=0;
long long p;
for(j=0;j<n-1;j++)
{
for(k=j+1;k<n;k++)
{
for(int u=1;u<n-1;u++)
{
long long d;
int sum=0;
a=j;
d=tree[k]-tree[j];
if(d%u) continue;
d=d/u;
p=tree[j];
while(p<=tree[j]+(n-1)*d&&a<n)
{
if(p==tree[a])
{
sum++;
a++;
p+=d;
}
else if(p<tree[a]&&d!=0)
{
p+=d;
}
else
{
a++;
}
}
// cout<<endl;
if(ans<sum) ans=sum;
}
}
}
cout<<"Case #"<<i<<": "<<n-ans<<endl;
}
}
return 0;
}