Codeforces Round 976 (Div. 2)

lyrrr發表於2024-09-30

B:

很容易發現只有因數個數為偶數的燈泡是亮的。所以只有完全平方數的因數是奇數個。
實現上可以二分。
但是sqrt是double的必須開sqrtl才是long double的,才能滿足這題long long的資料範圍。人給我卡傻了。哈哈。

#include<bits/stdc++.h>
using namespace std;
#define int unsigned long long

void solve(){
    int n,k;cin>>k;
    int l=1,r=1e19,mid=(l+r)/2;
    while(l<r){
        if(mid-floor(sqrtl(mid))<k)l=mid+1;
        else r=mid;
        mid=(l+r)/2;
        //if(mid<10)cout<<mid<<' '<<mid-floor(sqrt(mid))<<endl;
    }
    cout<<mid<<endl;
}
signed main(){
    int t=1;cin>>t;while(t--){
        solve();
    }
}

相關文章