Submission #116196

#TimeUsernameProblemLanguageResultExecution timeMemory
116196JohnTitorToys (CEOI18_toy)C++11
100 / 100
1534 ms36688 KiB
#include <bits/stdc++.h> using namespace std; #define FOR(i, j, k) for(int i=(j); i<=(k); i++) #define FFOR(i, j, k) for(int i=(j); i<(k); i++) #define DFOR(i, j, k) for(int i=(j); i>=(k); i--) #define bug(x) cerr<<#x<<" = "<<(x)<<'\n' #define pb push_back #define mp make_pair #define bit(s, i) (((s)>>(i))&1LL) #define mask(i) ((1LL<<(i))) #define builtin_popcount __builtin_popcountll #define __builtin_popcount __builtin_popcountll using ll=long long; using ld=long double; mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); const ld pi=acos(0)*2; template <typename T> inline void read(T &x){char c; bool nega=0; while((!isdigit(c=getchar()))&&(c!='-')); if(c=='-'){nega=1; c=getchar();} x=c-48; while(isdigit(c=getchar())) x=x*10+c-48; if(nega) x=-x;} template <typename T> inline void writep(T x){if(x>9) writep(x/10); putchar(x%10+48);} template <typename T> inline void write(T x){if(x<0){ putchar('-'); x=-x;} writep(x);} template <typename T> inline void writeln(T x){write(x); putchar('\n');} #define taskname "Toys" int n; vector <pair <int, int>> v; void factorize(int n){ int i=2; while(i*i<=n){ if(n%i==0){ v.pb(mp(i, 0)); while(n%i==0){ v.back().second++; n/=i; } } i++; } if(n>1) v.pb(mp(n, 1)); } vector <int> divisors; void backtrack(int a, int b, int s){ if(a==v.size()){ if(s>1) divisors.pb(s); } else{ backtrack(a+1, 0, s); if(b<v[a].second) backtrack(a, b+1, s*v[a].first); } } map <int, vector <pair <int, int>>> f; void caculate(int u){ if(!f[u].empty()) return; vector <pair <int, bool>> temp; temp.pb(mp(u-1, 0)); temp.pb(mp(u, 1)); for(int v: divisors) if((u%v==0)&&(u!=v)&&(u/v>=v)){ caculate(u/v); for(auto x: f[u/v]){ temp.pb(mp(x.first+v-1, 0)); temp.pb(mp(x.second+v, 1)); } } sort(temp.begin(), temp.end()); int beg=temp[0].first; int cnt=0; for(auto x: temp){ if(x.second){ cnt--; if(cnt==0) f[u].pb(mp(beg, x.first-1)); } else{ cnt++; if(cnt==1) beg=x.first; } } } int main(){ #ifdef Aria if(fopen(taskname".in", "r")) freopen(taskname".in", "r", stdin); #endif // Aria read(n); factorize(n); backtrack(0, 0, 1); caculate(n); int ans=0; for(auto x: f[n]) ans+=x.second-x.first+1; writeln(ans); for(auto x: f[n]) FOR(i, x.first, x.second) write(i), putchar(' '); }

Compilation message (stderr)

toy.cpp: In function 'void backtrack(int, int, int)':
toy.cpp:39:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(a==v.size()){
        ~^~~~~~~~~~
#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...