以下为最优解之一的代码
//P1142 轰炸
//
#include<bits/stdc++.h>
using namespace std;
struct d{
int x,y;
}di[710];
int main(){
int n;cin>>n;
for(int i=1;i<=n;i++)cin>>di[i].x>>di[i].y;
int max=0;
for(int i=1;i<n;i++){
int s=0,x1=(di[i].x-di[i+1].x),y1=(di[i].y-di[i+1].y);
for(int j=1;j<=n;j++){
int x2=(di[i].x-di[j].x),y2=(di[i].y-di[j].y);
if(x1*y2==x2*y1)s++;
}
if(max<s)max=s;
}
cout<<max;
return 0;
}
给出两组相同数据,只是顺序不一样
5
0 0
1 1
2 2
0 1
1 2
5
0 0
0 1
1 1
1 2
2 2
以上代码分别输出3和2,可见原题数据保证答案一定在给出的相邻两点之间。
所以可以让数据的顺序修改一下来卡掉上面的代码就是,都不用重新造数据。