Submission #1139430

#TimeUsernameProblemLanguageResultExecution timeMemory
1139430teo_55Cutting a rectangle (LMIO18_staciakampis)C++20
25 / 100
1095 ms3948 KiB
#include<iostream> #include<vector> #include<map> #include<algorithm> #define int long long struct dr{ int w, h; }; std::vector<dr>v; std::vector<dr>input; std::vector<int>sol; std::map<std::pair<int, int>, bool>f; int n; void back(dr current) { if(v.empty()) { int max=std::max(current.h, current.w); int min=std::min(current.h, current.w); if(!f[{min, max}]) { f[{min, max}]=true; sol.push_back(min); } return; } for(int i=0; i<v.size(); ++i) { dr elim=v[i]; if(v[i].w==current.h) { current.w+=v[i].h; v.erase(v.begin()+i); back(current); v.insert(v.begin()+i, elim); current.w-=v[i].h; } if(v[i].w==current.w) { current.h+=v[i].h; v.erase(v.begin()+i); back(current); v.insert(v.begin()+i, elim); current.h-=v[i].h; } if(v[i].h==current.h) { current.w+=v[i].w; v.erase(v.begin()+i); back(current); v.insert(v.begin()+i, elim); current.w-=v[i].w; } if(v[i].h==current.w) { current.h+=v[i].w; v.erase(v.begin()+i); back(current); v.insert(v.begin()+i, elim); current.h-=v[i].w; } } } signed main() { std::cin>>n; for(int i=0; i<n; ++i) { int w, h; std::cin>>w>>h; input.push_back({w, h}); v.push_back({w, h}); } for(int i=0; i<v.size(); ++i) { dr current=v[i]; v.erase(v.begin()+i); back(current); v.insert(v.begin()+i, current); } std::sort(sol.begin(), sol.end()); std::cout<<sol.size()<<'\n'; for(int i : sol) std::cout<<i<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...