1 条题解
-
0
C :
#include <stdio.h> int isObtuseTriangle(int, int, int, int, int, int); int main() { int T, N, points[128][2], i, j, k, count; scanf("%d", &T); while (T--){ scanf("%d", &N); if (N < 3){ printf("%d\n", 0); continue; } for (i = 0; i < N; i++){ scanf("%d%d", &points[i][0], &points[i][1]); } count = 0; for(i = 0; i < N; i++){ for(j = i + 1; j < N; j++){ for(k = j + 1; k < N; k++){ count += isObtuseTriangle(points[i][0],points[i][1], points[j][0],points[j][1], points[k][0],points[k][1]); } } } printf("%d\n", count); } return 0; } int isObtuseTriangle(int x1, int y1, int x2, int y2, int x3, int y3) { int sideSquare[3], tmp, slope[2]; if (x1 == x2 && x1 == x3){ return 0; } slope[0] = (y2-y1)*(x3-x2); slope[1] = (y3-y2)*(x2-x1); if (slope[0] == slope[1]){ return 0; } sideSquare[0] = (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); sideSquare[1] = (x1-x3)*(x1-x3)+(y1-y3)*(y1-y3); sideSquare[2] = (x3-x2)*(x3-x2)+(y3-y2)*(y3-y2); if (sideSquare[1] > sideSquare[0]){ tmp = sideSquare[1]; sideSquare[1] = sideSquare[0]; sideSquare[0] = tmp; } if (sideSquare[2] > sideSquare[0]){ tmp = sideSquare[2]; sideSquare[2] = sideSquare[0]; sideSquare[0] = tmp; } if (sideSquare[0] > (sideSquare[1] + sideSquare[2])){ return 1; } return 0; }
C++ :
#include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> #include <cmath> using namespace std; const int V = 100 + 5; int n, T; int num[V][2]; double len(int i, int j) { return sqrt(1.0 * (num[i][0] - num[j][0]) * (num[i][0] - num[j][0]) + 1.0 * (num[i][1] - num[j][1]) * (num[i][1] - num[j][1])); } bool is_ok(int i, int j, int k) { double a = len(i, j); double b = len(j, k); double c = len(i, k); double Max = max(max(a, b), c); double ans; if(Max == a) ans = (b * b + c * c - a * a) / (2 * b * c); else if(Max == b) ans = (a * a + c * c - b * b) / (2 * a * c); else ans = (a * a + b * b - c * c) / (2 * a * b); if(ans < 0.0 && fabs(ans) > 1e-6 && ans + 1.0 >= 1e-6) return true; return false; } int main() { int i, j, k; // FILE *outFile = fopen("a.out", "w"); //FILE *inFile = fopen("a.in", "r"); // fscanf(inFile, "%d", &T); scanf("%d", &T); while(T--) { int ans = 0; // fscanf(inFile, "%d", &n); scanf("%d", &n); for(i = 0; i < n; ++i) { // fscanf(inFile, "%d%d", &num[i][0], &num[i][1]); scanf("%d%d", &num[i][0], &num[i][1]); } for(i = 0; i < n; ++i) for(j = i + 1; j < n; ++j) for(k = j + 1; k < n; ++k) if(is_ok(i, j, k)) ans++; // fprintf(outFile, "%d\n", ans); printf("%d\n", ans); } }
- 1
信息
- ID
- 2793
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者