Advertisement
The5threic1-1

AC (BinCoin)

Feb 7th, 2024
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | Source Code | 0 0
  1. #include<bits/stdc++.h>
  2. #define endl '\n'
  3. using namespace std;
  4. #ifdef  ONLINE_JUDGE
  5.     #define eprintf(...) 42
  6. #else
  7.         #define eprintf(...) {fprintf(stderr, __VA_ARGS__);fflush(stderr);}
  8. #endif
  9. clock_t startTime;
  10. double getCurrentTime()
  11. {
  12.     return (double)(clock() - startTime) / CLOCKS_PER_SEC;
  13. }
  14. int solve()
  15. {
  16.     int n, k;
  17.     cin>>n>>k;
  18.     assert(n&1);
  19.     int arr[k][n], pos[k][n+1], l[k][n+1], r[k][n+1];
  20.     int parent[n+1] = { 0 };
  21.     for(int i=0; i<k; i++)
  22.     {
  23.         for(int j=0; j<n; j++)
  24.         {
  25.             cin>>arr[i][j];
  26.             pos[i][arr[i][j]] = j; l[i][arr[i][j]] = j; r[i][arr[i][j]] = j;
  27.         }      
  28.     }
  29.     set<int> skippie;
  30.     for(int p=0; p<n; p++)
  31.     {
  32.         for(int i=1; i<=n; i++)
  33.         {
  34.             if(skippie.count(i))
  35.             {
  36.                 continue;
  37.             }
  38.             bool vrai = true;
  39.             set<int> neigh;
  40.             for(int j=0; (j<k) && vrai; j++)
  41.             {
  42.                 if(pos[j][i]==0 || pos[j][i]==n-1)
  43.                 {
  44.                     vrai = false;
  45.                     continue;
  46.                 }      
  47.                 if(neigh.empty())
  48.                 {
  49.                     neigh.insert(arr[j][pos[j][i]-1]); neigh.insert(arr[j][pos[j][i]+1]);
  50.                 }
  51.                 else
  52.                 {
  53.                     if((!neigh.count(arr[j][pos[j][i]-1]))||(!neigh.count(arr[j][pos[j][i]+1])))
  54.                     {
  55.                         vrai = false;
  56.                     }
  57.                 }              
  58.             }
  59.             if(vrai)
  60.             {
  61.                 for(auto child : neigh)
  62.                 {
  63.                     skippie.insert(child);
  64.                     parent[child] = i; 
  65.                 }          
  66.                 skippie.insert(i);
  67.                 for(int f=0; f<k; f++)
  68.                 {
  69.                     for(auto child : neigh)
  70.                     {
  71.                         l[f][i] = min(l[f][i], l[f][child]);
  72.                         r[f][i] = max(r[f][i], r[f][child]);
  73.                     }
  74.                     arr[f][l[f][i]] = i; arr[f][r[f][i]] = i;
  75.                 }
  76.             }
  77.         }
  78.     }
  79.     for(int i=1; i<=n; i++)
  80.     {
  81.         cout<<(parent[i]==0 ? -1 : parent[i])<<" ";
  82.     }
  83.     cout<<endl;
  84.     return 0;
  85. }
  86. int main()
  87. {
  88.     ios::sync_with_stdio(false);
  89.     cin.tie(0);
  90.     int t=1;
  91.     //cin>>t;
  92.     startTime = clock();
  93.     while(t--)
  94.     {
  95.         startTime = clock();
  96.         solve();
  97.     }
  98.     eprintf("time = %.5lf\n", getCurrentTime());
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement