Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <numeric>
- #include <algorithm>
- #include <set>
- #include <map>
- #include <queue>
- #include <cassert>
- #include <vector>
- #include <string>
- using namespace std;
- typedef long long ll;
- int main()
- {
- int k;
- scanf("%d", &k);
- vector<int> a(k), b(k);
- for(int i=0;i<k;i++)
- scanf("%d",&a[i]);
- for(int i=0;i<k;i++)
- scanf("%d",&b[i]);
- int total = accumulate(a.begin(), a.end(), 0);
- for(int res = total; res>=1; res--)
- if(total%res == 0)
- {
- bool can = true;
- for(int i=0;i<k;i++)
- if(b[i]*ll(res) > a[i])
- can = false;
- if(can)
- {
- vector<int> prefix;
- for(int i=0;i<k;i++)
- for(int j=0;j<b[i];j++)
- prefix.push_back(i+1);
- vector<int> left;
- for(int i=0;i<k;i++)
- for(int j=0;j<(a[i]-res*b[i]);j++)
- left.push_back(i+1);
- int leftPerRow = left.size()/res;
- printf("%d %d\n", res, total/res);
- for(int i=0;i<res;i++)
- {
- for(int j: prefix)
- {
- printf("%d ", j);
- }
- for(int j=0;j<leftPerRow;j++)
- {
- printf("%d ", left.back());
- left.pop_back();
- }
- puts("");
- }
- return 0;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment