零点工作室暑假集训(AtCoder--ABC239)

A - Horizon

题意:假设从一个离地面高度为x米的地方看到的地平线距离为x(12800000+x)米,那么从离地面高度为H米的地方看到的地平线距离是多少米?

思路:考察了sqrt函数的用法,然后注意一下精度即可
在这里插入图片描述

AC代码

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 300010 , INF = 0x3f3f3f3f , Mod = 998244353;

int x;

int main() 
{
    cin >> x;
    printf("%.6lf", sqrt(x) * sqrt(12800000 + x));
    
    return 0;
}

B - Integer Division

题意: 给定一个介于 -10^18 和 10^18(包含两端)之间的整数X,打印出 ⌊10^X⌋。这里的 ⌊ ⌋ 符号表示向下取整。

思路: 分数大于等于0和小于0两种情况考虑,若负数取绝对值的情况下能整除就不加1,不能整除就加1;正数正常除就行

AC代码

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 300010 , INF = 0x3f3f3f3f , Mod = 998244353;

LL n;

int main() 
{
    cin >> n;
    if(n < 0)
    {
        if(abs(n) / 10 * 10 == abs(n)) cout << "-" << abs(n) / 10;
        else cout << "-" << abs(n) / 10 + 1;
    }
    else cout << n / 10;
    
    return 0;
}

C - Knight Fork

题意: 问题描述
在xy坐标平面上,是否存在一个点,它与两个点(x1, y1)和(x2, y2)的距离都是5?
注释
一个xy坐标平面上,其x和y坐标都是整数的点被称为格点。
两点(a,b)和(c,d)之间的距离被定义为它们之间的欧几里德距离,即√((a - c)² + (b - d)²)。
以下图示展示了一个xy平面,黑圆表示(0,0)处,白圆表示与(0,0)距离为5的格点。(网格显示了其中一个坐标为整数)。
在这里插入图片描述

思路: 样例中画的图已经明示我们了 一个点只能走日字才能到达距离自己sqrt(5)的点,​ 每个点有8个这样的点 所以枚举其中一个点周围的8个点 查看8个点里是否存在符合题意的即可,简单来说就是先找出到第一个点距离为sqrt(5)的所有点,然后看看有没有点到第二个点的距离也是sqrt(5)即可

AC代码

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 100010 , INF = 0x3f3f3f3f , Mod = 998244353;

int dx[] = {1, 2, 2, 1, -1, -2, -2, -1}; // 枚举八个方向
int dy[] = {2, 1, -1, -2, -2, -1, 1, 2};

set<pair<int, int>> s;
LL a, b, c, d;

int main()
{
    cin >> a >> b >> c >> d;

    for (int i = 0; i < 8; i ++)
    {
        int x = a + dx[i];
        int y = b + dy[i];
        s.insert({x, y});
    }
    int flag = 0;
    for (int i = 0; i < 8; i ++)
    {
        int x = c + dx[i];
        int y = d + dy[i];
        if (s.count({x, y})) 
        {
            flag = 1;
            break;
        }
    }
    
    if (flag) cout << "Yes";
    else cout << "No";
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值