Nickpips

Untitled

Dec 15th, 2015 (edited)
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     ifstream in;
  10.     ofstream out;
  11.     in.open( "cardgame.in" );
  12.     out.open( "cardgame.out" );
  13.  
  14.     int n;
  15.     in >> n;
  16.  
  17.     vector<int> elsie(n);
  18.     vector<int> bessie(2*n, 0); // -1 = doesn't have, 0 = unused, 1 = lost, 2 = won
  19.     for( int i = 0; i < n; i++ )
  20.     {
  21.         in >> elsie[i];
  22.         bessie[--elsie[i]] = -1;
  23.     }
  24.  
  25.     vector<int> lower;
  26.     vector<int> higher;
  27.  
  28.     for( int i = 0, k = 0; i < 2*n; i++ )
  29.     {
  30.         if( bessie[i] == 0 )
  31.         {
  32.             if( k < n/2 )
  33.             {
  34.                 lower.push_back( i );
  35.                 k++;
  36.             } else
  37.                 higher.push_back( i );
  38.         }
  39.     }
  40.  
  41.     for( int i = 0; i < n/2; i++ )
  42.     {
  43.         if( elsie[i] > higher.back() )
  44.         {
  45.             bessie[higher.front()] = 1;
  46.             higher.erase( higher.begin() );
  47.         } else
  48.         {
  49.             int j = 0;
  50.             for( j = 0; j < higher.size() && higher.at( j ) < elsie[i]; j++ );
  51.             bessie[higher.at( j )] = 2;
  52.             higher.erase( higher.begin()+j );
  53.         }
  54.     }
  55.  
  56.     for( int i = n/2; i < n; i++ )
  57.     {
  58.         if( elsie[i] < lower.front() )
  59.         {
  60.             bessie[lower.back()] = 1;
  61.             lower.erase( lower.end()-1 );
  62.         } else
  63.         {
  64.             int j = 0;
  65.             for( j = lower.size()-1; j >= 0 && lower.at( j ) > elsie[i]; j-- );
  66.             bessie[lower.at( j )] = 2;
  67.             lower.erase( lower.begin()+j );
  68.         }
  69.     }
  70.  
  71.     int ans = 0;
  72.     for( int i = 0; i < 2*n; i++ )
  73.         if( bessie[i] == 2 )
  74.             ans++;
  75.  
  76.     out << ans << endl;
  77.  
  78.     in.close();
  79.     out.close();
  80.     return 0;
  81. }
Add Comment
Please, Sign In to add comment