标签:
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