这是一道模拟加排序的题目

理解题目意思,包含原点的圆通过移动任意距离使其不包含原点。那么一开始就不包含原点就不需要考虑也就是距离原点距离d>半径r,那么要保存距离原点距离d<半径r的代价,直接算出结果存到vector中即可。最后对于vector排序,保留最小的k个,将剩余的加和输出即可。一定要注意,这里的vector长度不是n!!!用a.size()!!!早上真的昏头了,犯这种错误。。。。。。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair(double,double)
#define pi 3.14159265358979324

void solve(){
    int n,k;
    // cin>>n>>k;
    scanf("%lld%lld",&n,&k);
    vector<double>res;
    double x,y,r;
    for(int i=1;i<=n;i++){
        // cin>>x>>y>>r;
        scanf("%lf%lf%lf",&x,&y,&r);
        double dis=sqrt(x*x+y*y);//距离原点的距离
        double t=r-dis;
        if(t>0){
            res.push_back(t*pi*r*r);
        }
    }
    sort(res.begin(),res.end(),greater<double>());
    double ans=0.0;
    for(int i=k;i<res.size();i++){
        ans+=res[i];
    }
    // cout<<ans<<endl;
    printf("%.8lf",ans);
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    solve();
    return 0;
}