이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#define ll long long int
#define ld long double
#define ii int
#define pb push_back
#define fi first
#define se second
#define Op operator
#define bp __builtin_popcount
#define Faster ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl '\n'
#define TT ll tt;cin>>tt;while(tt--){Test_Case();}
#define T Test_Case() ;
using namespace std;
const ii N = 2e5 , M = 1e6 , mod = 1e9 + 7 , Ones = 1 , Zero = 0;
const ll oo = 1e18 ;
ld a[N + 5] , b[N + 5] , Prea[N + 5] , Preb[N + 5] , ans = 0 ;
bool comp(ld aa , ld bb) {
return aa > bb ;
}
void Test_Case(){
ii n ; cin >> n ;
for(ii i = 1 ; i <= n ; i ++ ) {
cin >> a[i] >> b[i] ; a[i] -= 1.0 , b[i] -= 1.0 ;
}
sort(a + 1 , a + n + 1 , comp) ; sort(b + 1 , b + n + 1 , comp) ;
for(ii i = 1 ; i <= n ; i ++) {
Prea[i] = Prea[i - 1] + a[i] ;
}
ld s = 0 ;
for(ii i = 1 ; i <= n ; i ++) {
ii l = 1 , r = n , idx = n + 1 ; s += b[i] ;
while(l <= r) {
ii m1 = l + (r - l) / 3 , m2 = r - (r - l) / 3 ;
if(min(s - m1 , Prea[m1] - i) < min(s - m2 , Prea[m2] - i)) {
l = m1 + 1 ;
}
else r = m2 - 1 , idx = m2 ;
}
ans = max(ans , min(s - idx , Prea[idx] - i)) ;
}
cout << setprecision(4) << fixed << ans << endl ;
}
int main(){
Faster
T ;
}
////// // // // // //////
// // // // // //
////// ////// //// //
// // // // //
////// // // // ////////
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |