Advertisement
paranid5

graph

Sep 15th, 2020 (edited)
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>  
  3.  
  4. // обойти 1 раз, подсчитав при том кол-во не 1-иц. Далее просто чекать это число
  5.  
  6. int main()
  7. {
  8.     int n = 0;
  9.  
  10.     while (std::cin >> n)
  11.     {
  12.         std::vector<std::pair<int, std::vector<bool>>> matrix(n, {0, std::vector<bool>(n, false)});
  13.         matrix.shrink_to_fit();
  14.  
  15.         for (int i = 0; i < n; i++)
  16.         {
  17.             int x = 0;
  18.             std::scanf("%d", &x), x--;
  19.  
  20.             matrix[i].second[x] = true, matrix[i].first++;
  21.             matrix[x].second[i] = true, matrix[x].first++;
  22.         }
  23.        
  24.         int max = 0;
  25.        
  26.         for (int m = 0; m < n; m++)
  27.         {
  28.           if (matrix[m].first == 1)
  29.             continue;
  30.          
  31.           for (int r = 0; r < n; r++)
  32.             if (matrix[m].second[r] == true && matrix[r].first > 1)
  33.               max++;
  34.         }
  35.        
  36.         printf("TEST %d\n", max);
  37.        
  38.         max /= 2;
  39.  
  40.         std::vector<int> dels;
  41.  
  42.         for (int d = 2; d * d <= n; d++)
  43.         {
  44.             if (n % d == 0)
  45.             {
  46.                 dels.push_back(d);
  47.                 if (d * d != n) dels.push_back(n / d);
  48.             }
  49.         }
  50.        
  51.         printf("size %llu\n", dels.size());
  52.        
  53.         int an = 2;
  54.  
  55.         for (int del : dels)
  56.         {
  57.           printf("del %d\n", del);
  58.           if (n / del <= max)
  59.             an++;
  60.         }
  61.        
  62.         std::printf("%d\n", an);
  63.     }
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement