1 条题解

  • 0
    @ 2024-9-27 17:41:31

    比较基础的贪心
    设计知识:勾股定理+贪心
    预计难度:上位黄/绿
    CSP-S复赛前发题解 rp++

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    double T, n, L, W;
    bool check(double bp,double pos,double r)
    {
    	if(r<(W/2)) return false;
    	double d=sqrt(r*r-(W/2)*(W/2));
    	return (pos-d)<=bp;
    }
    double cal(double pos,double r)
    {
    	double d=sqrt(r*r-(W/2)*(W/2));
    	return pos+d;
    }
    struct Poi{
    	double pos,r;
    	friend bool operator<(Poi a,Poi b){
    		return cal(a.pos,a.r)<cal(b.pos,b.r);
    	}
    };
    signed main() {
        ios::sync_with_stdio(0);
        cin.tie(nullptr), cout.tie(nullptr);
        cin >> T;
        while (T--) {
            cin >> n >> L >> W;
    		vector<Poi> vec(n+1);
    		for(int i=1;i<=n;i++){
    			cin>>vec[i].pos>>vec[i].r;
    		}
    		sort(vec.begin()+1,vec.end());
    		double l=0,r=L;
    		int cnt=0;
    		while(l<r)
    		{
    			double rm=0;
    			for(int i=1;i<=n;i++)
    				if(check(l,vec[i].pos,vec[i].r))
    					rm=max(cal(vec[i].pos,vec[i].r),rm);
    			if(rm>l) l=rm;
    			else {
    				cnt=-1;
    				break;
    			}
    			cnt++;
    		}
    		cout<<cnt<<endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    413
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    (无)
    递交数
    3
    已通过
    2
    上传者