题解:P15483 [CERC2012] Darts
题解:P15483 [CERC2012] Darts
前言
思路讲解
这题也是非常的简单呀!
对于每个 \((x,y)\),算出它离原点的欧几里得距离,判断是否在靶子上,如果不在就跳过不加分。
如果在靶子上,就根据欧几里得距离判断它在哪一环,得了多少分,加到 \(ans\) 里面即可。
AC Code
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int _;
cin >> _;
while (_--)
{
int n;
cin >> n;
int ans = 0;
for (int i = 1; i <= n; i++)
{
int x, y;
cin >> x >> y;
int d = x * x + y * y;
//也可以开根号,但是你如果所有欧几里得距离计算都不算根号就可以省略
if (d > 40000) continue;
for (int p = 10; p >= 1; p--)
{
int rd = 400LL * (11 - p) * (11 - p);
if (d <= rd)
{
ans += p;
break;
}
}
}
cout << ans << '\n';
}
return 0;
}

浙公网安备 33010602011771号