Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <vector>
- #include <map>
- #define ll long long
- #define MOD 1000000007
- using namespace std;
- ll fact[100010];
- vector<int> librero(vector<int> bases, vector<int> libros, vector<int> &orden)
- {
- ll cant = 1;
- int minV = *min_element(bases.begin(), bases.end()), maxV = *max_element(libros.begin(), libros.end());
- int n = (int)bases.size(), alt = (maxV + minV), diff, mz;
- fact[1] = 1LL;
- map < int, vector < int > > mapa;
- map < int, bool > usado;
- for(int i = 0; i < n; i++)
- mapa[libros[i]].push_back(i + 1);
- for(ll i = 2LL; i <= 100000; i++)
- fact[i] = (((fact[i - 1] % MOD) * (i % MOD)) % MOD);
- for(int i = 0; i < n; i++)
- {
- diff = (alt - bases[i]);
- mz = (int)mapa[diff].size();
- if(mz > 0)
- {
- if(!usado[diff])
- {
- cant = (((cant % MOD) * (fact[mz] % MOD)) % MOD);
- usado[diff] = true;
- }
- orden.push_back(mapa[diff].back());
- mapa[diff].pop_back();
- }
- else
- cant = 0;
- }
- if(!cant)
- {
- orden.clear();
- return {-1, 0};
- }
- return {(int)alt, (int)cant};
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement