uva 270 Lining Up/poj 1118

来源:互联网 发布:买车下个什么app软件 编辑:程序博客网 时间:2024/06/06 20:45

这道题感觉uva上面的测试数据有问题,同样的方法在poj上可以过,uva上就是wa,不知道为什么,一开始超时了,因为没有注意三点共线的判断方法,要点是用向量的外积算夹角正弦值,一开始用的是算余弦值的方法,计算量有点大才造成超时的,改过之后就ac了,其余的都是暴力解法的思路,就不多说了。最后是在poj上过的,uva上面始终wa,不知道怎么回事。


#include <stdio.h>#include <algorithm>using namespace std;struct pos{int x;int y;};struct pos arr[750];bool same_line(int a, int b, int c){int x1, y1, x2, y2;x1 = arr[a].x - arr[b].x;y1 = arr[a].y - arr[b].y;x2 = arr[c].x - arr[b].x;y2 = arr[c].y - arr[b].y;if(x1*y2 - x2*y1 == 0)return true;return false;}void func(int n){int i, j, ii;int count, max_num;if(1 == n){printf("1\n");return;}if(2 == n){printf("2\n");return;}max_num = 2;for(i=n-1; i>=1; i--){for(j=i-1; j>=0; j--){if(2+j <= max_num)continue;count = 2;for(ii=0; ii<j; ii++){if(same_line(ii, j, i))count++;}if(max_num < count)max_num = count;}}printf("%d\n", max_num);}int main(void){int n, i;//freopen("input.dat", "r", stdin);while(1){scanf("%d", &n);if(!n)break;for(i=0; i<n; i++)scanf("%d %d", &(arr[i].x), &(arr[i].y));func(n);}return 0;}