Submission #165051

#TimeUsernameProblemLanguageResultExecution timeMemory
165051Sparky_09Detecting Molecules (IOI16_molecules)C++17
100 / 100
78 ms8296 KiB
#include <iostream> #include <vector> #include <algorithm> #define int long long using namespace std; vector<int32_t> find_subset(int32_t l, int32_t u, vector<int32_t> arr){ vector<pair<int, int32_t>> arr1; for(int i = 0;i<arr.size();i++){ arr1.push_back(make_pair(arr[i], i)); } sort(arr1.begin(), arr1.end()); vector<int32_t> answer; int first = 0, last = 0; int sum = 0; while(last<=arr1.size() && first<arr.size()){ if(sum>=l && sum<=u){ for(int i = first;i<last;i++){ answer.push_back(arr1[i].second); } goto returnanswer; } else if(sum<l){ if(last<arr1.size()) sum+=arr1[last].first; last++; } else{ sum-=arr1[first].first; first++; } } returnanswer: return answer; } /* #include<bits/stdc++.h> #ifdef LOCAL_DEFINE #include<conio.h> #endif using namespace std; void io(); void end(); vector<int> find_subset(int l, int u, vector<int> v){ int n = v.size(); vector<pair<int, int>> p(n); vector<int> ans(0), pref(n+1, 0); for(int i = 0; i < n; i++){ p[i] = {v[i], i}; pref[i+1]=pref[i]+v[i]; if(v[i]>=l and v[i]<=u){ ans.push_back(i); return ans; } } int ll = -1, r = -1; sort(p.begin(), p.end()); for(int i = 0, j = 1; i<n and j<=n;){ if(l<=(pref[j]-pref[i]) and (pref[j]-pref[i])<=u){ ll = i; r = j-1; break; } if((pref[j]-pref[i])>u) i++; else if((pref[j]-pref[i])<l) j++; } if(ll!=-1) for(int i = ll; i <= r; i++) ans.push_back(p[i].second); return ans; } int main(){ io(); int l, u, n; cin >> l >> u >> n; vector<int> v(n); for(int& i: v) cin >> i; vector<int> z = find_subset(l, u, v); for(auto i: z) cout << i << ' '; end(); } void io(){ #ifdef LOCAL_DEFINE ios_base::sync_with_stdio(0); cin.tie(0); freopen("input.txt", "rt", stdin); #endif } void end(){ #ifdef LOCAL_DEFINE cerr << "\nTime Elapsed: " << 1.0 * clock()/CLOCKS_PER_SEC << " s.\n"; getch(); #endif } */ /* if(ll==-1) for(int i = n-1, j = n; i>=0;){ if((pref[j]-pref[i])>=l and (pref[j]-pref[i])<=u){ ll = i; r = j-1; break; } if((pref[j]-pref[i])>u){ j--; if(i==j) i--; } else if((pref[j]-pref[i])<l) i--; } */

Compilation message (stderr)

molecules.cpp: In function 'std::vector<int> find_subset(int32_t, int32_t, std::vector<int>)':
molecules.cpp:8:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0;i<arr.size();i++){
                   ~^~~~~~~~~~~
molecules.cpp:15:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(last<=arr1.size() && first<arr.size()){
           ~~~~^~~~~~~~~~~~~
molecules.cpp:15:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(last<=arr1.size() && first<arr.size()){
                                ~~~~~^~~~~~~~~~~
molecules.cpp:23:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(last<arr1.size()) sum+=arr1[last].first;
                ~~~~^~~~~~~~~~~~
#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...