题解: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;
}
posted @ 2026-02-27 20:20  fengjunxiao2014  阅读(9)  评论(0)    收藏  举报