列表

详情


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;
}

上一题