天天看點

uva270 已成功AC!

挺簡單一題,編完後過不了,然後一直調,是在不知道哪裡有問題,看了網上别人的代碼,思路一樣的,實作稍微有點不同,然後就開始改,照着别人的改,可是一直過不了,最後改得幾乎是一樣的了,可還是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;
}