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