求改
查看原帖
求改
1056852
stupid_juruo_alpha楼主2023/12/16 10:15
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

const int MAX = 191980;
int n;
double engry, s[MAX], k[MAX], u[MAX];
int  alpha(int a, int b,int c){
    return 2 * k[c] * b * a * a * (a - u[c]) ;
}
double speed(double x, int i){
    double l = max(u[i], double(0)), r = 114514.1, id;
    int _114514=60;
    while(_114514--){
        id = (l + r) / 2;
        if(alpha(id,x,i) > -s[i]) {
            l = id;
            
        }
        else{ 
            r = id;
            
        }
    }
    //id = (l + r) / 2;
    return (l + r) / 2;
}
double fo(double x){
    double sum = 0;
    for(int i = 1; i <= n; i++){
        double v = speed(x, i);
        sum += k[i] * (v - u[i]) * (v - u[i]);
    }
    return sum;
}
int juk(int ans,int mid){
    ans=0;
    for(int i = 1; i <= n; i++){
        ans += s[i] / speed(mid, i);
    }
    return ans;
}
int main(){

    cin>>n>>engry;
    for(int i = 1; i <= n; i++){
        cin>>s[i]>>k[i]>>u[i];
        k[i]*=s[i];
    }
       
    double l = -114514, r = 0, m;
    /*
    ⠀⠰⢷⢿⠄
⠀
    ⠀⠀⠀⠀⣼⣷⣄
⠀
    ⠀⣤⣿⣇⣿⣿⣧⣿⡄
⢴
    ⠾⠋⠀⠀⠻⣿⣷⣿⣿⡀

    ?⠀⢀⣿⣿⡿⢿⠈⣿
⠀
    ⠀⠀⢠⣿⡿⠁⠀⡊⠀⠙
⠀
    ⠀⠀⢿⣿⠀⠀⠹⣿
⠀
    ⠀⠀⠀⠹⣷⡀⠀⣿⡄
⠀
    ⠀⠀⠀⣀⣼⣿⠀⢈⣧
    在犇犇里发这个
    */
    int wi = 100;
    while(wi--){
        m = (l + r) / 2;
        if(fo(m) <= engry){ 
            l = m;
            
        }
        else {
            r = m;
            
        }
    }
    m = (l + r) / 2;
    double ans = 0;
    ans=juk(ans,m);
    
        
    cout<<fixed<<setprecision(10)<<endl;

    return 0;
}
2023/12/16 10:15
加载中...