标签:
Description
Input
The first line of the input contains an integer T (T≤10), indicating the number of test cases.
For each test case:
The first line contains one integer n (1≤n≤100), the number of stars.
The next n lines each contains two integers x and y (0≤|x|, |y|≤1,000,000) indicate the points, all the points are distinct.
Output
Sample Input
1 3 0 0 10 0 5 1000
Sample Output
1
套一个锐角三角形的性质就可以了
两边平方和大于第三边的平方和
开始用第一种方法来做 比较耗时 后来看了高端玩家是怎么循环的 第二种方法的耗时大大的降低
way1
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace std; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w",stdout); #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; typedef pair<int,int> PII; const int MX = 100 + 5; struct Point{ double x, y; }P[MX]; bool check(int i, int j, int k){ if(i == j || i == k || j == k) return false; double len1 = (P[i].x - P[j].x)*(P[i].x - P[j].x) + (P[i].y - P[j].y)*(P[i].y - P[j].y); double len2 = (P[i].x - P[k].x)*(P[i].x - P[k].x) + (P[i].y - P[k].y)*(P[i].y - P[k].y); double len3 = (P[j].x - P[k].x)*(P[j].x - P[k].x) + (P[j].y - P[k].y)*(P[j].y - P[k].y); len1 = sqrt(len1); len2 = sqrt(len2); len3 = sqrt(len3); if(len1 * len1 + len2 * len2 > len3 * len3) if(len1 * len1 + len3 * len3 > len2 * len2) if(len3 * len3 + len2 * len2 > len1 * len1) return true; return false; } int main(){ //FIN int t; while (~scanf ("%d", &t)){ while (t--){ int n; scanf ("%d", &n); for (int i = 0; i < n; i ++) scanf ("%lf%lf", &P[i].x, &P[i].y); int cnt = 0; for (int i = 0; i < n; i ++){ for(int j = 0; j < n ; j ++){ for(int k = 0; k < n; k ++){ if(check(i, j, k)) cnt ++; } } } printf ("%d\n",cnt/6); } } return 0; }
way2
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace std; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w",stdout); #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; typedef pair<int,int> PII; const int MX = 100 + 5; struct Point{ double x, y; }P[MX]; bool check(int i, int j, int k){ double len1 = (P[i].x - P[j].x)*(P[i].x - P[j].x) + (P[i].y - P[j].y)*(P[i].y - P[j].y); double len2 = (P[i].x - P[k].x)*(P[i].x - P[k].x) + (P[i].y - P[k].y)*(P[i].y - P[k].y); double len3 = (P[j].x - P[k].x)*(P[j].x - P[k].x) + (P[j].y - P[k].y)*(P[j].y - P[k].y); len1 = sqrt(len1); len2 = sqrt(len2); len3 = sqrt(len3); if(len1 * len1 + len2 * len2 > len3 * len3) if(len1 * len1 + len3 * len3 > len2 * len2) if(len3 * len3 + len2 * len2 > len1 * len1) return true; return false; } int main(){ //FIN int t; while (~scanf ("%d", &t)){ while (t--){ int n; scanf ("%d", &n); for (int i = 0; i < n; i ++) scanf ("%lf%lf", &P[i].x, &P[i].y); int cnt = 0; for (int i = 0; i < n - 2; i ++){ for(int j = i + 1; j < n - 1; j ++){ for(int k = j + 1; k < n; k ++){ if(check(i, j, k)) cnt ++; } } } printf ("%d\n",cnt); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/Hyouka/p/5790925.html