Submission #1118286

#TimeUsernameProblemLanguageResultExecution timeMemory
1118286crafticatDetecting Molecules (IOI16_molecules)C++17
9 / 100
1 ms604 KiB
#include <bits/stdc++.h> #include "molecules.h" using namespace std; template<typename T> using V = vector<T>; using ll = long long; using vi = V<int>; using pi = pair<int,int>; constexpr int INF = 1e9 + 7; #define F0R(i, n) for (int i = 0; i < n;i++) #define FOR(i, j , n) for (int i = j ;i < n;i++) vi possible(ll l, ll u, vi w, int k) { int ptrEnd = w.size() - k; //including int ptrStart = 0; // Not including ll curSum = 0; FOR(i, ptrEnd, w.size()) curSum += w[i]; while (curSum > u && ptrStart < k) { curSum -= w[ptrEnd]; ptrEnd++; curSum += w[ptrStart]; ptrStart++; } if (curSum <= u && curSum >= l) { vi vals; F0R(i, ptrStart) vals.push_back(i); FOR(i, ptrEnd, w.size()) { vals.push_back(i); } return vals; } return {}; } std::vector<int> find_subset(int l, int u, std::vector<int> w) { sort(w.begin(), w.end()); ll offset = w[0]; for (auto &x : w) x -= offset; V<ll> prefixSums(w.size() + 1), revPrefixSums(w.size() + 1); // Not including, including F0R(i, w.size()) { prefixSums[i + 1] = prefixSums[i] + w[i]; } F0R(i, w.size()) { prefixSums[i] = prefixSums[i + 1] + w[i]; } FOR(k, 1, w.size() + 1) { if ((prefixSums[k + 1] >= ll(l - k * offset)) && revPrefixSums[k] <= ll(u - k * offset)) { auto r = possible(l - k * offset, u - k * offset, w, k); if (!r.empty()) return r; } } return {}; } #if DEBUG int main() { int n, l, u; assert(3 == scanf("%d %d %d", &n, &l, &u)); std::vector<int> w(n); for (int i = 0; i < n; i++) assert(1 == scanf("%d", &w[i])); std::vector<int> result = find_subset(l, u, w); printf("%d\n", (int)result.size()); for (int i = 0; i < (int)result.size(); i++) printf("%d%c", result[i], " \n"[i == (int)result.size() - 1]); } #endif

Compilation message (stderr)

molecules.cpp: In function 'vi possible(ll, ll, vi, int)':
molecules.cpp:14:41: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 | #define FOR(i, j , n) for (int i = j ;i < n;i++)
......
   21 |     FOR(i, ptrEnd, w.size())
      |         ~~~~~~~~~~~~~~~~~~~              
molecules.cpp:21:5: note: in expansion of macro 'FOR'
   21 |     FOR(i, ptrEnd, w.size())
      |     ^~~
molecules.cpp:14:41: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 | #define FOR(i, j , n) for (int i = j ;i < n;i++)
......
   33 |         FOR(i, ptrEnd, w.size()) {
      |             ~~~~~~~~~~~~~~~~~~~          
molecules.cpp:33:9: note: in expansion of macro 'FOR'
   33 |         FOR(i, ptrEnd, w.size()) {
      |         ^~~
molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:13:37: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 | #define F0R(i, n) for (int i = 0; i < n;i++)
......
   49 |     F0R(i, w.size()) {
      |         ~~~~~~~~~~~                  
molecules.cpp:49:5: note: in expansion of macro 'F0R'
   49 |     F0R(i, w.size()) {
      |     ^~~
molecules.cpp:13:37: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 | #define F0R(i, n) for (int i = 0; i < n;i++)
......
   52 |     F0R(i, w.size()) {
      |         ~~~~~~~~~~~                  
molecules.cpp:52:5: note: in expansion of macro 'F0R'
   52 |     F0R(i, w.size()) {
      |     ^~~
molecules.cpp:14:41: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 | #define FOR(i, j , n) for (int i = j ;i < n;i++)
......
   56 |     FOR(k, 1, w.size() + 1) {
      |         ~~~~~~~~~~~~~~~~~~               
molecules.cpp:56:5: note: in expansion of macro 'FOR'
   56 |     FOR(k, 1, w.size() + 1) {
      |     ^~~
#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...