WY4. 炮台攻击
描述
兰博教训提莫之后,然后和提莫讨论起约德尔人,谈起约德尔人,自然少不了一个人,那 就是黑默丁格------约德尔人历史上最伟大的科学家. 提莫说,黑默丁格最近在思考一个问题:黑默丁格有三个炮台,炮台能攻击到距离它小于等于R的敌人 (两点之间的距离为两点之间的直线距离,例如(3,0),(0,4)之间的距离是5),如果一个炮台能攻击 到敌人,那么就会对敌人造成1×的伤害.黑默丁格将三个炮台放在N*M方格中的点上,并且给出敌人 的坐标. 问:那么敌人受到伤害会是多大?输入描述
每一行输入9个整数R x1 y1 x2 y2 x3 y3 x0 y0 其中R代表炮台攻击的最大距离,(x1,y1),(x2,y2),(x3,y3)代表三个炮台的坐标,(x0,y0)代表敌人的坐标。输出描述
输出一行,这一行代表敌人承受的最大伤害,(如果每个炮台都不能攻击到敌人,输出0×)示例1
输入:
1 1 1 2 2 3 3 1 2
输出:
2x
C 解法, 执行用时: 1ms, 内存消耗: 328KB, 提交时间: 2021-09-06
#include "stdio.h" #include "stdlib.h" #include "string.h" #include "math.h" int main() { int R, x[4], y[4]; int i,count; while (~scanf("%d %d %d %d %d %d %d %d %d", &R, &x[1], &y[1], &x[2], &y[2],&x[3],&y[3], &x[0], &y[0])) { count = 0; for (i = 1; i < 4; i++) { if ((x[i] - x[0])*(x[i] - x[0])+(y[i]-y[0])*(y[i]-y[0]) <= R * R) count++; } printf("%dx\n", count); } return 0; }
C++ 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2017-07-24
/*#include <stdio.h> int main() { int r, x1, y1, x2, y2, x3, y3, x0, y0; scanf("%d%d%d%d%d%d%d%d%d", &r, &x1, &y1, &x2, &y2, &x3, &y3, &x0, &y0); int t = 0; #define SQR(x) ((x)*(x)) #define TEST(x, y) do{\ if ((SQR(x - x0) + SQR(y - y0)) <= SQR(r)) t++;\ }while(0) TEST(x1, y1); TEST(x2, y2); TEST(x3, y3); printf("%dx\n", t); return 0; }*/ #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std; inline int sqr(int x){return x * x;} int main(){ int R,x[6],y[6]; while(scanf("%d",&R) != EOF){ for(int i = 0;i < 4;++ i) scanf("%d%d",&x[i],&y[i]); int ret = 0; for(int i = 0;i < 3;++ i) if(sqr(x[i] - x[3]) + sqr(y[i] - y[3]) <= sqr(R)) ++ ret; printf("%dx\n",ret); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 304KB, 提交时间: 2021-09-21
#include <stdio.h> #include <stdlib.h> #include <math.h> double dst(int x0, int y0, int x1, int y1) { double res; double x; x = (x0 - x1) * (x0 - x1) + (y0 - y1) * (y0 - y1); res = sqrt(x); return res; } int main() { int x0, y0, x1, y1, x2, y2, x3, y3, R; double t; int res = 0; scanf("%d %d %d %d %d %d %d %d %d", &R, &x1, &y1, &x2, &y2, &x3, &y3, &x0, &y0); do { t = dst(x0, y0, x1, y1); if(t - R <= 0.000001) res += 1; t = dst(x0, y0, x2, y2); if(t - R <= 0.000001) res += 1; t = dst(x0, y0, x3, y3); if(t - R <= 0.000001) res += 1; printf("%dx\n",res); res = 0; }while(scanf("%d %d %d %d %d %d %d %d %d", &R, &x1, &y1, &x2, &y2, &x3, &y3, &x0, &y0) != EOF); }
C 解法, 执行用时: 2ms, 内存消耗: 320KB, 提交时间: 2021-09-21
#include<stdio.h> int main() { int R; int arr[4][2]; while(~scanf("%d%d%d%d%d%d%d%d%d",&R,&arr[0][0],&arr[0][1],&arr[1][0],&arr[1][1],&arr[2][0],&arr[2][1],&arr[3][0],&arr[3][1])) { int sum=0; for(int i=0;i<3;i++) { int distance=(arr[i][0]-arr[3][0])*(arr[i][0]-arr[3][0])+(arr[i][1]-arr[3][1])*(arr[i][1]-arr[3][1]); if(distance<=R*R){ sum++; } } printf("%dx\n",sum); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 324KB, 提交时间: 2022-05-10
#include <stdio.h> int main() { int pao[8]; int R; while(scanf("%d",&R)!=EOF){ for(int i=0;i<8;i++) scanf("%d",&pao[i]); int cnt=0; for(int i=0;i<6;i+=2) { if((pao[i]-pao[6])*(pao[i]-pao[6])+(pao[i+1]-pao[7])*(pao[i+1]-pao[7])<=R*R) cnt++; //printf("%d",(pao[i]-pao[6])*(pao[i]-pao[6])+(pao[i+1]-pao[7])*(pao[i+1]-pao[7])); } printf("%dx\n",cnt); } return 0; }