GastonFontenla

N3P2 - Librero (Solución con map)

Sep 1st, 2019
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include "librero.h"
  3.  
  4. using namespace std;
  5.  
  6. #define MOD 1000000007
  7.  
  8. long long factorial(long long n)
  9. {
  10.     long long f = 1;
  11.     for(long long i=1; i<=n; i++)
  12.         f = f*i%MOD;
  13.     return f;
  14. }
  15.  
  16. vector <int> librero(vector <int> bases, vector <int> libros, vector <int> &orden)
  17. {
  18.     map<int, int> mapBases, mapLibros;
  19.  
  20.     for(int i=0; i<(int)bases.size(); i++)
  21.     {
  22.         mapBases[bases[i]]++;
  23.         mapLibros[libros[i]]++;
  24.     }
  25.  
  26.     if(mapBases.size() != mapLibros.size())
  27.         return {-1, 0};
  28.  
  29.     auto itBases = mapBases.begin();
  30.     auto itLibros = mapLibros.rbegin();
  31.  
  32.     long long formas = 1;
  33.     int alturaRef = itBases->first + itLibros->first;
  34.  
  35.     for(int i=0; i<(int)mapBases.size(); i++)
  36.     {
  37.         if(itBases->first + itLibros->first != alturaRef)
  38.             return {-1, 0};
  39.  
  40.         if(itBases->second != itLibros->second)
  41.             return {-1, 0};
  42.  
  43.         formas = formas*factorial(itLibros->second)%MOD;
  44.         itBases++, itLibros++;
  45.     }
  46.  
  47.     vector <pair<int, int> > parBases(bases.size()), parLibros(libros.size());
  48.  
  49.     for(int i=0; i<(int)bases.size(); i++)
  50.     {
  51.         parBases[i] = {bases[i], i};
  52.         parLibros[i] = {libros[i], i};
  53.     }
  54.  
  55.     sort(parBases.rbegin(), parBases.rend());
  56.     sort(parLibros.begin(), parLibros.end());
  57.  
  58.     orden.resize(bases.size());
  59.  
  60.     for(int i=0; i<(int)parBases.size(); i++)
  61.         orden[parBases[i].second] = parLibros[i].second+1;
  62.  
  63.     return {alturaRef, (int)formas};
  64. }
Advertisement
Add Comment
Please, Sign In to add comment