Advertisement
jkonefal

Untitled

Nov 19th, 2020
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define mp make_pair
  4. #define s second
  5. #define f first
  6. int n,l=1,z,a,b,m,c;//m-dlugosc, l-licznik, a-liczba wczytywanych dziur, b-miejsca dziur, counter
  7. vector <pair <int, pair <int, int> > > p[100010];//przedzialy
  8. vector <pair <int, bool> > g[100010];//graf
  9. //vector <bool> d[100010];
  10. stack <int> w;//pierwsze wierzcholki do polaczenia z zerowym
  11. int main()
  12. {
  13.     ios_base::sync_with_stdio(0);
  14.     cin.tie(0);
  15.     cout.tie(0);
  16.     cin>>n>>m>>z;
  17.     for(int i=1; i<=n; ++i)
  18.     {
  19.         cin>>a>>b;
  20.         p[i].push_back(mp(l,mp(1,b-1)));//kazdy przedzial to wierzcholek
  21.         //cout<<p[i][0].f<<" "<<p[i][0].s.f<<" "<<p[i][0].s.s<<"    ";
  22.         w.push(l);
  23.         l++;//przedzialy ida na pale
  24.         if (a>2)
  25.         {
  26.             for(int j=1; j<a; ++j)
  27.             {
  28.                 cin>>b;
  29.                 p[i].push_back(mp(l,mp(p[i][j-1].s.s+2,b-1)));//przedzial od ostatniej dziury do aktualnej
  30.                 g[l].push_back(mp(l-1, 1));
  31.                 //cout<<p[i][j].f<<" "<<p[i][j].s.f<<" "<<p[i][j].s.s<<"    ";
  32.                 l++;
  33.             }
  34.         }
  35.         p[i].push_back(mp(l,mp(p[i][a-1].s.s+2,m)));
  36.         g[l].push_back(mp(l-1, 1));
  37.         //cout<<p[i][a].f<<" "<<p[i][a].s.f<<" "<<p[i][a].s.s<<endl;
  38.         l++;
  39.     }
  40.     while (w.size()>0)
  41.     {
  42.         g[0].push_back(w.back());
  43.         w.pop();
  44.     }
  45.    
  46.     for(int i=2; i<=n; ++i)
  47.     {
  48.         c=0;
  49.         for(int j=0; j<(int)p[i].size(); ++j)
  50.         {
  51.             if (p[i-1][c].s.s<p[i][j].s.s) //schodzenie w dol z pierwszej wyspy u gory
  52.             {
  53.                 g[p[i-1][c].f].push_back(mp(p[i][j].f,0));
  54.                 cout<<c<<" "<<j<<" dol"<<" ";
  55.                 c++;
  56.             }
  57.             while(/*(p[i-1][c].s.f<=p[i][j].s.s || p[i-1][c].s.s>p[i][j].s.f)  && */ c<(int)p[i-1].size())
  58.             {
  59.                 if (p[i-1][c].s.f<=p[i][j].s.s)
  60.                 {
  61.                 g[p[i][j].f].push_back(mp(p[i-1][c].f, 1));//potem juz jest pattern dla gornej wyspy ze najpierw sie do niej wchdzi a potem schodzi
  62.                 cout<<c<<" "<<j<<" gora"<<" ";
  63.                 }
  64.                 else break;
  65.                 if (p[i-1][c].s.s<p[i][j].s.s)
  66.                 {
  67.                     g[p[i-1][c].f].push_back(mp(p[i][j].f,0));
  68.                     cout<<c<<" "<<j<<" dol"<<" ";
  69.                     c++;//jak juz zejdziesz zmieniasz wyspe
  70.                 }
  71.             }
  72.         }
  73.         cout<<endl;
  74.     }
  75.  
  76. }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement