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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值