제출 #1224826

#제출 시각아이디문제언어결과실행 시간메모리
1224826TadijaSebezLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
94 ms2408 KiB
#include <bits/stdc++.h> using namespace std; #define ldb double const int N=505; const ldb inf=1e18; const int bm1=1e9; ldb dp[N][N]; int a[N],b[N],ord[N],mn[N]; int main(){ int n,k; scanf("%i %i",&n,&k); for(int i=1;i<=n;i++){ scanf("%i %i",&a[i],&b[i]); ord[i]=i; if(b[i]==-1)b[i]=bm1; } sort(ord+1,ord+1+n,[&](int i,int j){return make_pair(b[i],a[i])<make_pair(b[j],a[j]);}); multiset<int> tmp; for(int i=n;i>k;i--){ tmp.insert(a[ord[i]]); } for(int i=k;i>=1;i--){ mn[i]=mn[i+1]; tmp.insert(a[ord[i]]); mn[i]+=*tmp.begin(); tmp.erase(tmp.begin()); } ldb ans=mn[1]; for(int take=0;take<=k;take++){ for(int i=0;i<=k;i++){ for(int j=0;j<=k;j++){ dp[i][j]=inf; } } dp[0][0]=0; for(int i=1;i<=k;i++){ for(int j=0;j<=min(i,take);j++){ dp[i][j]=dp[i-1][j]+(ldb)a[ord[i]]/(take+1); if(j>0 && b[ord[i]]!=bm1){ dp[i][j]=min(dp[i][j],dp[i-1][j-1]+(ldb)b[ord[i]]/j); } } if(i>=take){ ans=min(ans,dp[i][take]+(ldb)mn[i+1]/(take+1)); } } } printf("%.12lf\n",ans); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'int main()':
Main.cpp:14:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   14 |     scanf("%i %i",&n,&k);
      |     ~~~~~^~~~~~~~~~~~~~~
Main.cpp:16:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |         scanf("%i %i",&a[i],&b[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~
#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...