제출 #1250677

#제출 시각아이디문제언어결과실행 시간메모리
1250677lioowLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
640 ms8336 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #define pb push_back #define int long long #define repp(i,x,n) for(int i=x;i<=n;i++) #define rep(i,x,n) for(int i=x;i>=n;i--) #define r0 return 0 #define fi first #define se second #define liow ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) #define jelek cout<<"jelek"<<endl #define pii pair<int,int> #define all(v) v.begin(),v.end() #define tp tuple<int,int,int> #define fl fflush(stdout) #define ld long double #define p5 pair<int,pair<pair<int,int>,pair<int,int>>> #pragma GCC optimize ("O2") #pragma GCC optimize ("unroll-loops") using namespace std; using namespace __gnu_pbds; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; typedef tree<pair<int,int>, null_type, less<pair<int,int>>, rb_tree_tag, tree_order_statistics_node_update> ordered_multiset; //const int mod=1e9+7; const int SQMAX=635,INF=1e18; const int mod=998244353; //const int MOD=1e6+3; mt19937_64 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count()); pii dr[8]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}}; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; int dxx[4]={1,1,-1,-1}; int dyy[4]={1,-1,-1,1}; int mul(int x,int y){return (x%mod*y%mod)%mod;} int expo(int b,int e){ if(e==0) return 1; int tmp=expo(b,e/2); if(e%2) return mul(tmp,mul(tmp,b)); else return mul(tmp,tmp); } const int maxn=1e6; bool cmp(pii x,pii y){ if(x.se!=y.se) return x.se<y.se; return x.fi<y.fi; } void solve(){ int n,k;cin>>n>>k; pii a[n+2]; repp(i,1,n){ cin>>a[i].fi>>a[i].se; if(a[i].se==-1) a[i].se=INF; } sort(a+1,a+n+1,cmp); ld suf[n+2][k+2]; repp(j,0,k+1) suf[n+1][j]=INF; suf[n+1][0]=0; for(int i=n;i>=1;i--){ for(int j=0;j<=k;j++){ //ambil suf[i][j]=INF; if(j>0){ suf[i][j]=min(suf[i][j],suf[i+1][j-1]+a[i].fi); } //ga suf[i][j]=min(suf[i][j],suf[i+1][j]); } } ld dp[k+2][k+2]; ld ans=INF; repp(buff,0,k){ dp[0][0]=0; if(buff==0){ ans=min(ans,suf[1][k]/(ld)(buff+1)); } repp(i,1,buff) dp[0][i]=INF; for(int i=1;i<=k;i++){ for(int j=0;j<=buff;j++){ dp[i][j]=INF; //ambil buff if(j>0 && a[i].se!=INF){ dp[i][j]=min(dp[i][j],dp[i-1][j-1]+(ld)a[i].se/(ld)(j)); } //ga dp[i][j]=min(dp[i][j],dp[i-1][j]+(ld)(a[i].fi)/(ld)(buff+1)); if(j==buff){ ans=min(ans,dp[i][j]+suf[i+1][k-i]/(ld)(buff+1)); } } } } cout<<fixed<<setprecision(10)<<ans<<endl; } signed main(){ liow; int t=1; // cin>>t; while(t--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...