답안 #916070

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
916070 2024-01-25T08:34:44 Z yeediot Let's Win the Election (JOI22_ho_t3) C++14
21 / 100
297 ms 4840 KB
#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define pb push_back
#define pii pair<int,int>
#define F first
#define S second
#define all(X) X.begin(),X.end()
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#ifdef local
void setio(){freopen("/Users/iantsai/Library/Mobile Documents/com~apple~CloudDocs/cpp/Empty.md","r",stdin);}
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
void setio(){}
#define debug(x...)
#endif
bool cmp(pii a,pii b){
    if(a.S!=b.S)return a.S<b.S;
    return a.F<b.F;
}
const int inf=2e9;
signed main(){
    cout<<fixed<<setprecision(10);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    setio();
    int n,k;
    cin>>n>>k;
    vector<pii>vec;
    vec.pb({0,0});
    for(int i=0;i<n;i++){
        int a,b;
        cin>>a>>b;
        vec.pb({a,b});
        if(b==-1){
            vec[i+1].S=inf;
        }
    }
    sort(all(vec),cmp);
    vector<vector<int>>suf(n+1,vector<int>(k+1));
    for(int i=1;i<=k;i++){
        multiset<int>st;
        int sum=0;
        for(int j=n;j>=1;j--){
            st.insert(vec[j].F);
            sum+=vec[j].F;
            if((int)(st.size())>i){
                sum-=*prev(st.end());
                st.erase(prev(st.end()));
            }
            if((int)(st.size())<i){
                suf[j][i]=inf;
            }
            else{
                suf[j][i]=sum;
            }
        }
    }
    double ans=inf;
    for(int p=0;p<=k;p++){
        vector<vector<double>>dp(n+1,vector<double>(p+1,inf));
        dp[0][0]=0;
        for(int i=1;i<=n;i++){
            for(int j=0;j<=p;j++){
                if(j)dp[i][j]=dp[i-1][j-1]+(double)vec[i].S/j;
                dp[i][j]=min(dp[i][j],dp[i-1][j]+(double)vec[i].F/(p+1));
                //cout<<i<<' '<<j<<' '<<dp[i][j]<<' '<<vec[i].F<<'\n';
                if(j==p){
                    if(i!=n)chmin(ans,dp[i][j]+(double)suf[i+1][k-i]/(p+1));
                    else if(k-i==0)chmin(ans,dp[i][j]);
                    //cout<<i<<' '<<j<<' '<<ans<<' '<<dp[i][j]<<'\n';
                }
            }
        }
        //cout<<ans<<'\n';
    }
    cout<<ans<<'\n';
}




# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 4 ms 900 KB Output is correct
6 Correct 18 ms 1676 KB Output is correct
7 Correct 66 ms 3100 KB Output is correct
8 Correct 139 ms 3780 KB Output is correct
9 Correct 238 ms 4744 KB Output is correct
10 Correct 117 ms 3452 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 4 ms 900 KB Output is correct
6 Correct 18 ms 1676 KB Output is correct
7 Correct 66 ms 3100 KB Output is correct
8 Correct 139 ms 3780 KB Output is correct
9 Correct 238 ms 4744 KB Output is correct
10 Correct 117 ms 3452 KB Output is correct
11 Correct 1 ms 344 KB Output is correct
12 Correct 28 ms 2004 KB Output is correct
13 Correct 28 ms 1880 KB Output is correct
14 Correct 25 ms 1880 KB Output is correct
15 Correct 127 ms 3748 KB Output is correct
16 Correct 126 ms 3444 KB Output is correct
17 Correct 142 ms 3440 KB Output is correct
18 Correct 241 ms 4712 KB Output is correct
19 Correct 242 ms 4724 KB Output is correct
20 Correct 239 ms 4720 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 239 ms 4780 KB Output is correct
2 Correct 243 ms 4640 KB Output is correct
3 Correct 240 ms 4740 KB Output is correct
4 Correct 245 ms 4768 KB Output is correct
5 Correct 297 ms 4756 KB Output is correct
6 Correct 238 ms 4840 KB Output is correct
7 Correct 241 ms 4712 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 4 ms 900 KB Output is correct
6 Correct 18 ms 1676 KB Output is correct
7 Correct 66 ms 3100 KB Output is correct
8 Correct 139 ms 3780 KB Output is correct
9 Correct 238 ms 4744 KB Output is correct
10 Correct 117 ms 3452 KB Output is correct
11 Correct 1 ms 344 KB Output is correct
12 Correct 28 ms 2004 KB Output is correct
13 Correct 28 ms 1880 KB Output is correct
14 Correct 25 ms 1880 KB Output is correct
15 Correct 127 ms 3748 KB Output is correct
16 Correct 126 ms 3444 KB Output is correct
17 Correct 142 ms 3440 KB Output is correct
18 Correct 241 ms 4712 KB Output is correct
19 Correct 242 ms 4724 KB Output is correct
20 Correct 239 ms 4720 KB Output is correct
21 Incorrect 1 ms 348 KB Output isn't correct
22 Halted 0 ms 0 KB -