제출 #1263081

#제출 시각아이디문제언어결과실행 시간메모리
1263081silentloopDetecting Molecules (IOI16_molecules)C++20
46 / 100
1092 ms11728 KiB
#include <bits/stdc++.h> #define ll long long #define sz(x) int(x.size()) #define fr first #define se second #define pb push_back #define mp make_pair #define all(x) x.begin(),x.end() using namespace std; vector<int>arm(vector<pair<int,int>>&dp,int j) { ll sig=j; vector<int>ans; while(sig>=0) { if(dp[sig].se>=0) ans.pb(dp[sig].se); sig=dp[sig].fr; } return ans; } std::vector<int> find_subset(int l, int u, std::vector<int> w) { vector<int>ans; if(l>u) return ans; vector<pair<int,int>>dp(u+1); vector<bool>pos(u+1); vector<pair<ll,ll>>v; ll i, j, mi=LLONG_MAX, sum=0; for(i=0; i<sz(w); i++) { if(w[i]>u) continue; mi=min(mi,1ll*w[i]); v.pb({w[i],i}); sum=sum+w[i]; if(l<=w[i]&&w[i]<=u) { ans.pb(i); return ans; } } if(mi>u||sum<1ll*l) return ans; sort(all(v)); pos[0]=1; dp[0].fr=-1; dp[0].se=-1; set<ll>s; s.insert(0); for(i=0; i<sz(v); i++) { ll x=v[i].fr; int nod=v[i].se; auto it=s.upper_bound(u-x); vector<ll>in; while(it!=s.begin()) { it=prev(it); j=*it; if(pos[j+x]) continue; pos[j+x]=1; dp[j+x].fr=j; dp[j+x].se=nod; in.pb(j+x); if(j+x>=l) return arm(dp,j+x); } for(auto k:in) s.insert(k); } return ans; }

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

molecules.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
molecules_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...