挺简单一题,编完后过不了,然后一直调,是在不知道哪里有问题,看了网上别人的代码,思路一样的,实现稍微有点不同,然后就开始改,照着别人的改,可是一直过不了,最后改得几乎是一样的了,可还是wa,我就不明白为什么了,到底哪里出错了??
我的代码
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
struct Node
{
float x,y;
};
const int MAX = 705;
Node data[MAX];
int cases,max_point;
double k[MAX];
int main()
{
cin>>cases;
cin.get();cin.get();
while(cases--)
{
max_point=0;
int dex=0;
char str[100];
while (gets(str) && str[0] != '\0') {
sscanf(str, "%d%d", &data[dex].x, &data[dex].y);
dex++;
}
for (int i=0;i<dex;i++)
{
int index=0;
for (int j=0;j<dex;j++)
{
if (i!=j)
{
k[index++]=(data[j].y-data[i].y)/(data[j].x-data[i].x);
}
}
sort(k,k+index);
int count,p,m,l;
for(p=0;p<dex-1;p++){
for(m=p,l=p+1,count=2;k[m]==k[l];m++,l++,count++)
;
if(count>max_point)
max_point=count;
}
}
cout<<max_point<<endl;
if (cases)
cout<<endl;
}
return 0;
}
参考的能AC的代码,几乎改成一样的了啊,怎么还是wa!
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int Arsize=701;
struct Node{
float x,y;
};
Node coordinate[Arsize];
int max_node;
double k_gradient[Arsize];
int main()
{
int case_num,i,num_coordinate,j,k,num,m,l;
char str[100];
cin >> case_num;
cin.get();
cin.get();
while(case_num--){
i=0;
max_node=0;
while(gets(str)){
if(!str[0])
break;
sscanf(str,"%f%f",&coordinate[i].x,&coordinate[i].y);
i++;
}
num_coordinate=i;
for(i=0;i<num_coordinate;i++){
for(j=0,k=0;j<num_coordinate;j++){
if(i!=j){
k_gradient[k++]=(coordinate[i].y-coordinate[j].y)/(coordinate[i].x-coordinate[j].x);
}
}
sort(k_gradient,k_gradient+k);
for(k=0;k<num_coordinate-1;k++){
for(m=k,l=k+1,num=2;k_gradient[m]==k_gradient[l];m++,l++,num++)
;
if(num>max_node)
max_node=num;
}
}
cout << max_node;
cout << endl;
if(case_num)
cout << endl;
}
return 0;
}
真心求问哪里出问题了
==============================我是分割线======================================
时隔这么久又做了一遍,一次AC,思路是一样的,qsort排序的时候修改了排序的起始地址
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct cordinate
{
int x,y;
};
int compare(const void* a,const void* b)
{
int ax=((cordinate*)a)->x;
int ay=((cordinate*)a)->y;
int bx=((cordinate*)b)->x;
int by=((cordinate*)b)->y;
if (ax==bx)
{
return ay>by?1:-1;
}
return ax>bx?1:-1;
}
int cmp_double(const void* a,const void* b)
{
if (*(double*)a==*(double*)b) return 0;
else if (*(double*)a>*(double*)b) return 1;
else return -1;
}
const int Large=0x7fffffff;
int main()
{
int cases;
cin>>cases;cin.get();
char blankline[10];
cin.getline(blankline,10);
while (cases--)
{
cordinate cor[710];
int dex=0;
while (1)
{
char nextline[100];
cin.getline(nextline,100);
if (nextline[0]=='\0')
break;
sscanf(nextline,"%d%d",&cor[dex].x,&cor[dex].y);
dex++;
}
qsort(cor,dex,sizeof(cor[0]),compare);
double k[710];
int max=2;
for (int i=0;i<dex-1;i++)
{
for (int j=i+1;j<dex;j++)
{
if(cor[i].x==cor[j].x) k[j]=Large;
else k[j]=(double)(cor[j].y-cor[i].y)/(double)(cor[j].x-cor[i].x);
}
qsort(&k[i+1],dex-i-1,sizeof(k[0]),cmp_double);
int count=2;
int maxcount=2;
for (int m=i+2;m<dex;m++)
{
if (k[m]==k[m-1]) count++;
else{
maxcount=maxcount>count?maxcount:count;
count=2;
}
}
maxcount=maxcount>count?maxcount:count;
max=max>maxcount?max:maxcount;
}
cout<<max<<endl;
if (cases) cout<<endl;
}
return 0;
}