思路:
1,分别以每个点为坐标原点,暴力找斜率一样的点的个数。
自我提醒:
#include <iostream>
#include <cstdio>
#include <string.h>
#include <queue>
#include <algorithm>
#include <map>
typedef long long int lli;
using namespace std;
char s[100000];
int a[1010];
int b[1010];
int aa,bb;
int cnt;
double mm[1010];
int cntom;
int main(){
int ncase = 0;
int origin;
int x,y;
int ans;
while(1){
gets(s);
ncase++;
cnt = 1;
if(s[1] == '-')
break;
sscanf(s,"%d%d",a,b);
while(1){
gets(s);
if(s[1] == '-')
break;
sscanf(s,"%d%d",a+cnt,b+cnt);
cnt++;
}
ans = 0;
for(int i = 0;i < cnt;i++){
cntom = 0;
origin = 1;
x = 0,y = 0;
for(int j = i+1;j < cnt;j++){
aa = a[j] - a[i];
bb = b[j] - b[i];
double temp;
if(aa != 0 && bb != 0){
temp = (double)bb/aa;
mm[cntom++] = temp;
}
else if(aa == 0 && bb == 0){
origin++;
}
else if(aa == 0){
y++;
}
else{
x++;
}
}
int temp = max(x,y);
temp += origin;
ans = max(ans,temp);
sort(mm,mm+cntom);
int jishu = 1;
int maxjishu = 1;
for(int j = 1;j < cntom;j++){
if(mm[j] == mm[j-1] ){
jishu++;
}
else{
maxjishu = max(jishu,maxjishu);
jishu = 1;
}
}
maxjishu = max(jishu,maxjishu); // 注意!!!
ans = max(ans,maxjishu+origin);
}
printf("%d. %d\n",ncase,ans);
}
}