Advertisement
bartekltg

woj

Nov 23rd, 2012
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. pair<int,int> minmax(pair<int,int>a, pair<int, int> b)
  9. {
  10.     return make_pair(min(a.second,b.second),max(a.first,b.first));
  11. }
  12.  
  13.  
  14. int redukcja( vector<pair<int,int> > &jas, vector<pair<int,int> > &stas, vector<pair<int,int> > &njas,vector<pair<int,int> > &nstas, int n)
  15. {// seria tur, wyłożenie kart aż do napotkania pierwszej karty przeciwnika z tej serii tur.
  16.     if (n==1)
  17.     {//albo odwrotnie;)
  18.         return jas[0].first-stas[0].first;     
  19.     }
  20.     int offset=n%2;
  21.     if (offset==1)
  22.     {//to zostaje na ręce
  23.         njas[0]=jas[n-1];
  24.         nstas[0]=stas[n-1];
  25.     }
  26.     for (int i=0;i+1<n;i+=2)
  27.     {//miesko
  28.         njas[i/2+offset]=minmax(stas[i],stas[i+1]);
  29.         nstas[i/2+offset]=minmax(jas[i],jas[i+1]);
  30.     }
  31.     return redukcja(njas,nstas,jas,stas,(n+1)/2);
  32. }
  33.  
  34. int main()
  35. {
  36.     int n;
  37.     scanf("%d",&n);
  38.  
  39.     vector<pair<int,int> > jas(n);
  40.     vector<pair<int,int> > stas(n);
  41.     vector<pair<int,int> > njas((n+1)/2); //bufory
  42.     vector<pair<int,int> > nstas((n+1)/2);
  43.    
  44.     for (int i=0;i<n;i++)
  45.     {
  46.         int karta;
  47.         scanf("%d",&karta);
  48.         jas[i]=make_pair(karta,karta);
  49.     }
  50.     for (int i=0;i<n;i++)
  51.     {
  52.         int karta;
  53.         scanf("%d",&karta);
  54.         stas[i]=make_pair(karta,karta);;
  55.     }
  56.  
  57.     int wynik = redukcja(jas,stas,njas,nstas,n);
  58.     printf("%d",wynik);
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement