#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int k;
cin >> k;
vector<pair<int, int>> len(k);
int area = 0;
int mxl=0;
for(int i = 0; i < k; i++){
cin >> len[i].first >> len[i].second;
area += len[i].first*len[i].second;
mxl = max(mxl, len[i].second);
}
vector<vector<int>> lng(len.back().first+1);
vector<vector<int>> shrt(len.back().first+1);
for(int i = 0; i < k; i++){
lng[len[i].first].push_back(i);
shrt[len[i].second].push_back(i);
}
vector<int> ans;
for(int i = 1; i < len.back().first+1; i++){
if(!(area%i==0 && i <= area/i)){
continue;
}
int a = i;
int b = area/i;
vector<bool> visited(len.back().first+1, false);
while(true){
bool done = false;
if(a < b) swap(a, b);
if(a <= len.back().first){
for(auto u : lng[a]){
if(!visited[u]){
visited[u] = true;
done = true;
b -= len[u].second;
}
}
}
if(done)continue;
for(auto u : shrt[b]){
if(!visited[u]){
visited[u] = true;
done = true;
a -= len[u].first;
}
}
if(done)continue;
for(auto u : lng[b]){
if(!visited[u]){
visited[u] = true;
done = true;
a -= len[u].second;
}
}
if(!done)break;
}
if(a * b == 0)ans.push_back(i);
}
cout << ans.size() << "\n";
for(auto u : ans){
cout << u << "\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |