제출 #1317936

#제출 시각아이디문제언어결과실행 시간메모리
1317936_unknown_2010Detecting Molecules (IOI16_molecules)C++20
46 / 100
698 ms2092 KiB
#include "molecules.h" #include <bits/stdc++.h> using namespace std; #define vi vector // #define int long long #define all(x) (x).begin(), (x).end() mt19937 rng(363636); namespace sub4 { bool check(int n, int l, int u) { return (n <= 10000 && u <= 500000); } vector<int> find_subset(int l, int u, vector<int> w) { vi<int> dp(2e5), ind(2e5); dp[0]=1; for(int i=0; i<w.size(); i++){ for(int j=1e5; j>=w[i]; j--){ if(dp[j])continue; if(dp[j-w[i]])dp[j]=w[i], ind[j]=i; } } vi<int> ans; for(int i=l; i<=u; i++){ if(dp[i]){ int x=i; while(x!=0){ ans.push_back(ind[x]); x-=dp[x]; } break; } } return ans; } } namespace sub5 { vector<int> find_subset(int l, int u, vector<int> w) { vi<pair<int,int>> v; for(int i=0; i<w.size(); i++){ v.push_back({w[i], i}); } sort(all(v)); int n=w.size(), thre=36; for(int _=0; _<1000; _++){ for(int i=0; i<n; i+=thre){ int r=min(n-1, i+thre-1); shuffle(v.begin()+i, v.begin()+r+1, rng); } int sum=0; vi<int> ans; for(int i=0; i<n; i++){ sum+=v[i].first; ans.push_back(v[i].second); if(sum>=l && sum<=u){ return ans; } } } return vi<int>{}; } } vector<int> find_subset(int l, int u, vector<int> w) { int n = w.size(); if (sub4::check(n, l, u)) return sub4::find_subset(l, u, w); return sub5::find_subset(l, u, w); }

컴파일 시 표준 에러 (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...