The5threic1-1

RTE-T-16 (BinCoin)

Feb 7th, 2024
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 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.     int arr[k][n], pos[k][n+1], l[k][n+1], r[k][n+1];
  19.     int parent[n+1] = { 0 };
  20.     for(int i=0; i<k; i++)
  21.     {
  22.         for(int j=0; j<n; j++)
  23.         {
  24.             cin>>arr[i][j];
  25.             pos[i][arr[i][j]] = j; l[i][arr[i][j]] = j; r[i][arr[i][j]] = j;
  26.         }      
  27.     }
  28.     set<int> skippie;
  29.     for(int p=0; p<n; p++)
  30.     {
  31.         for(int i=1; i<=n; i++)
  32.         {
  33.             if(skippie.count(i))
  34.             {
  35.                 continue;
  36.             }
  37.             bool vrai = true;
  38.             set<int> neigh;
  39.             for(int j=0; (j<k) && vrai; j++)
  40.             {
  41.                 if(pos[j][i]==0 || pos[j][i]==n-1)
  42.                 {
  43.                     vrai = false;
  44.                     continue;
  45.                 }      
  46.                 if(neigh.empty())
  47.                 {
  48.                     neigh.insert(arr[j][pos[j][i]-1]); neigh.insert(arr[j][pos[j][i]+1]);
  49.                 }
  50.                 else
  51.                 {
  52.                     if((!neigh.count(arr[j][pos[j][i]-1]))||(!neigh.count(arr[j][pos[j][i]+1])))
  53.                     {
  54.                         vrai = false;
  55.                     }
  56.                 }              
  57.             }
  58.             if(vrai)
  59.             {
  60.                 for(auto child : neigh)
  61.                 {
  62.                     skippie.insert(child);
  63.                     parent[child] = i; 
  64.                 }          
  65.                 skippie.insert(i);
  66.                 for(int f=0; f<k; f++)
  67.                 {
  68.                     for(auto child : neigh)
  69.                     {
  70.                         l[f][i] = min(l[f][i], l[f][child]);
  71.                         r[f][i] = max(r[f][i], r[f][child]);
  72.                     }
  73.                     arr[f][l[f][i]] = i; arr[f][r[f][i]] = i;
  74.                 }
  75.             }
  76.         }
  77.     }
  78.     assert((int)skippie.size()==n);
  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. }
Add Comment
Please, Sign In to add comment