Submission #536028

#TimeUsernameProblemLanguageResultExecution timeMemory
536028zaneyuLet's Win the Election (JOI22_ho_t3)C++14
100 / 100
931 ms4364 KiB
/*input 20 14 106 277 175 217 170 227 164 245 118 254 139 261 142 270 185 200 162 241 153 239 128 264 103 299 147 248 158 236 160 232 183 205 194 197 135 260 153 234 128 260 */ #include<bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; typedef tree<long long, null_type, less_equal<long long>, rb_tree_tag, tree_order_statistics_node_update> indexed_set; #pragma GCC optimize("unroll-loops,no-stack-protector") //order_of_key #of elements less than x // find_by_order kth element using ll = long long; using ld = long double; using pii = pair<int,int>; #define f first #define s second #define pb push_back #define REP(i,n) for(int i=0;i<n;i++) #define REP1(i,n) for(int i=1;i<=n;i++) #define FILL(n,x) memset(n,x,sizeof(n)) #define ALL(_a) _a.begin(),_a.end() #define sz(x) (int)x.size() #define SORT_UNIQUE(c) (sort(c.begin(),c.end()), c.resize(distance(c.begin(),unique(c.begin(),c.end())))) const ll INF64=4e18; const int INF=0x3f3f3f3f; const ll MOD=1e9+7; const ld PI=acos(-1); const ld eps=1e-6; #define lowb(x) x&(-x) #define MNTO(x,y) x=min(x,(__typeof__(x))y) #define MXTO(x,y) x=max(x,(__typeof__(x))y) ll sub(ll a,ll b){ ll x=a-b; while(x<0) x+=MOD; while(x>MOD) x-=MOD; return x; } ll mult(ll a,ll b){ return (a*b)%MOD; } ll mypow(ll a,ll b){ if(b<=0) return 1; ll res=1LL; while(b){ if(b&1) res=(res*a)%MOD; a=(a*a)%MOD; b>>=1; } return res; } const ll maxn=500+5; const ll maxlg=__lg(maxn)+2; ld dp[maxn][maxn],ndp[maxn][maxn]; pii arr[maxn]; int main(){ int n,k; cin>>n>>k; int cnt=0; REP1(i,n){ cin>>arr[i].s>>arr[i].f; if(arr[i].f==-1) arr[i].f=INF; else ++cnt; } sort(arr+1,arr+n+1); REP1(i,n){ swap(arr[i].f,arr[i].s); } ld ans=INF; REP(a,min(k,cnt)+1){ REP(i,n+1) REP(j,k-a+1) dp[i][j]=INF; dp[0][0]=0; REP1(i,n){ REP(j,i+1){ if(i-j>a){ dp[i][j]=dp[i-1][j]; if(j) MNTO(dp[i][j],dp[i-1][j-1]+(ld)arr[i].f/(a+1)); } else{ dp[i][j]=(dp[i-1][j]+(ld)arr[i].s/(i-j)); if(j) MNTO(dp[i][j],dp[i-1][j-1]+(ld)arr[i].f/(a+1)); } } } MNTO(ans,dp[n][k-a]); } cout<<fixed<<setprecision(20)<<ans<<'\n'; }
#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...