Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <cstdio>
- #include <algorithm>
- #include <vector>
- using namespace std;
- pair<int,int> minmax(pair<int,int>a, pair<int, int> b)
- {
- return make_pair(min(a.second,b.second),max(a.first,b.first));
- }
- int redukcja( vector<pair<int,int> > &jas, vector<pair<int,int> > &stas, vector<pair<int,int> > &njas,vector<pair<int,int> > &nstas, int n)
- {// seria tur, wyłożenie kart aż do napotkania pierwszej karty przeciwnika z tej serii tur.
- if (n==1)
- {//albo odwrotnie;)
- return jas[0].first-stas[0].first;
- }
- int offset=n%2;
- if (offset==1)
- {//to zostaje na ręce
- njas[0]=jas[n-1];
- nstas[0]=stas[n-1];
- }
- for (int i=0;i+1<n;i+=2)
- {//miesko
- njas[i/2+offset]=minmax(stas[i],stas[i+1]);
- nstas[i/2+offset]=minmax(jas[i],jas[i+1]);
- }
- return redukcja(njas,nstas,jas,stas,(n+1)/2);
- }
- int main()
- {
- int n;
- scanf("%d",&n);
- vector<pair<int,int> > jas(n);
- vector<pair<int,int> > stas(n);
- vector<pair<int,int> > njas((n+1)/2); //bufory
- vector<pair<int,int> > nstas((n+1)/2);
- for (int i=0;i<n;i++)
- {
- int karta;
- scanf("%d",&karta);
- jas[i]=make_pair(karta,karta);
- }
- for (int i=0;i<n;i++)
- {
- int karta;
- scanf("%d",&karta);
- stas[i]=make_pair(karta,karta);;
- }
- int wynik = redukcja(jas,stas,njas,nstas,n);
- printf("%d",wynik);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement