fork(1) download
  1. #include <iostream>
  2. #include <algorithm> //для использования функции sort
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. const int lch = 256;
  8. int n;
  9. cin>>n;
  10.  
  11. char **p = new char* [n]; //Создаем массив p, где будем хранить пары символов.
  12. for (int i = 0; i < n; i++)
  13. {
  14. p[i] = new char [2];
  15. }
  16.  
  17. for (int i = 0; i < n; i++)
  18. {
  19. cin >> p[i][1]>>p[i][2];
  20. }
  21.  
  22. int chars[lch];
  23. for (int i = 0; i<lch; i++)
  24. {
  25. chars[i] = -1;
  26. }
  27. int K = 0;
  28. for (int i = 0; i<n; i++)
  29. {
  30. if (chars [ p[i][1]] == -1)
  31. K++;
  32. if (chars [ p[i][2]] == -1)
  33. K++;
  34. chars [ p[i][1]] = 0;
  35. chars [ p[i][2]] = 0;
  36. }
  37.  
  38. bool change;
  39. char x, y;
  40. int M;
  41. for (int i = 0; i < n; i++)
  42. {
  43. change = false;
  44. for (int j = 0; j < n; j++)
  45. {
  46. x = p[j][1];
  47. y = p[j][2];
  48. M = max(chars[x] + 1, chars [y]);
  49. if (M > (K-1))
  50. {
  51. cout<<"Порядок противоречив";
  52. return 0;
  53. }
  54. if (chars[y] != M)
  55. {
  56. change = true;
  57. }
  58. chars[y] = M;
  59. }
  60. if (!change)
  61. {
  62. sort(chars, chars+lch);
  63. int previous = K;
  64. int i = lch-1;
  65. while (chars [i] > -1)
  66. {
  67. if (chars[i] == previous - 1)
  68. {
  69. previous--;
  70. }
  71. else
  72. {
  73. cout<<"порядок неполный";
  74. return 0;
  75. }
  76. i--;
  77. }
  78. cout<<"полный порядок";
  79. return 0;
  80. }
  81. }
  82. return 0;
  83. }
Success #stdin #stdout 0s 3476KB
stdin
10
a 5
5 4
b 3
3 4
5 3
b 5
a b
4 *
* 0
4 0
stdout
полный порядок