Codeforces Round # 397 por Kaspersky Lab y Barcelona Bootcamp (Div. 1 + Div. 2 combinados) D. Artsem y Saunders (构造 , 数学)

Enlace: https://codeforces.com/contest/765/problem/D

Significado de la pregunta; da n números, respectivamente f (i), te permite encontrar n g (i) ym (arbitrario) h (i),

Entre ellos, g (h (x)) = x, h (g (x)) = f (x);

Solución: presione esta fórmula, puede obtener h (x) = f (h (x)), g (x) = g (f (x));

Por lo tanto, se deduce que f (x) = f (f (x)); determine si la función h existe, y la función h es la deduplicación de la función f;

código:

1 #include <bits / stdc ++. H>
 2  usando el  espacio de nombres std;
3  const  int maxn = 1e5 + 10 ;
4  int a [maxn], b [maxn], c [maxn];
5  int n, m;
6 mapa < int , int > mp;
7  int main ()
 8  {
 9      scanf ( " % d " , & n);
10      para ( int i = 1 ; i <= n; i ++) cin >> a [i];
11      para ( inti = 1 ; i <= n; i ++ )
 12      {
 13          if (a [a [i]]! = a [i])
 14          {
 15              cout << " -1 \ n " ;
16              devuelve  0 ;
17          }
 18      }
 19      para ( int i = 1 ; i <= n; i ++ )
 20      {
 21          if (mp [a [i]] == 0 )
 22          {
 23              m ++ ;
24              mp [a [i]] =metro;
25              c [m] = a [i];
26          }
 27          b [i] = mp [a [i]];
28      }
 29      cout << m << endl;
30      para ( int i = 1 ; i <= n; i ++ )
 31       cout << b [i] << "  " ;
32      cout << endl;
33      para ( int i = 1 ; i <= m; i ++ )
 34       cout << c [i] << "  " ;
35       cout << endl;
     // sistema ("pausa"); 
37      devuelve  0 ;
38 }

 

Supongo que te gusta

Origin www.cnblogs.com/sweetlittlebaby/p/12722693.html
Recomendado
Clasificación