Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define rep(i,a,n) for (int i=a;i<(int)n;i++)
- #define per(i,a,n) for (int i=n-1;i>=a;i--)
- #define pb push_back
- #define mp make_pair
- #define all(x) (x).begin(),(x).end()
- #define fi first
- #define se second
- #define SZ(x) ((int)(x).size())
- #define ACCU accumulate
- #define TWO(x) (1<<(x))
- #define TWOL(x) (1ll<<(x))
- #define clr(a) memset(a,0,sizeof(a))
- typedef vector<int> VI;
- typedef vector<string> VS;
- typedef long long ll;
- typedef long double LD;
- typedef pair<int,int> PII;
- typedef vector<PII> VPII;
- const int inf=0x20202020;
- const ll mod=1000000007;
- const double eps=1e-9;
- const double pi=3.1415926535897932384626;
- ll powmod(ll a,ll b) {ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
- // head
- int st[110];
- class YetAnotherCardGame {
- public:
- int maxCards(vector <int> petr, vector <int> snuke) {
- rep(i,1,101) st[i]=0;
- rep(i,0,SZ(petr)) st[petr[i]]|=1;
- rep(i,0,SZ(snuke)) st[snuke[i]]|=2;
- int cs=2,c1=0,c2=0,ans=0,r1=SZ(petr),r2=SZ(snuke);
- rep(i,1,101) {
- if (st[i]==0) continue;
- if (st[i]==3) {
- cs=3-cs; ans++;
- if (cs==1) r1--; else r2--;
- } else if (st[i]==2) {
- if (cs!=2) cs=2,ans++,r2--;
- else c2++;
- } else {
- if (cs!=1) cs=1,ans++,r1--;
- else c1++;
- }
- }
- return ans+min(c1+c2,min(r1,r2));
- }
- // BEGIN CUT HERE
- public:
- void run_test(int Case) { if ((Case == -1) || (Case == 0)) test_case_0(); if ((Case == -1) || (Case == 1)) test_case_1(); if ((Case == -1) || (Case == 2)) test_case_2(); if ((Case == -1) || (Case == 3)) test_case_3(); }
- private:
- template <typename T> string print_array(const vector<T> &V) { ostringstream os; os << "{ "; for (typename vector<T>::const_iterator iter = V.begin(); iter != V.end(); ++iter) os << '\"' << *iter << "\","; os << " }"; return os.str(); }
- void verify_case(int Case, const int &Expected, const int &Received) { cerr << "Test Case #" << Case << "..."; if (Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "\tExpected: \"" << Expected << '\"' << endl; cerr << "\tReceived: \"" << Received << '\"' << endl; } }
- void test_case_0() { int Arr0[] = {2, 5}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arr1[] = {3, 1}; vector <int> Arg1(Arr1, Arr1 + (sizeof(Arr1) / sizeof(Arr1[0]))); int Arg2 = 3; verify_case(0, Arg2, maxCards(Arg0, Arg1)); }
- void test_case_1() { int Arr0[] = {1, 1, 1, 1, 1}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arr1[] = {1, 1, 1, 1, 1}; vector <int> Arg1(Arr1, Arr1 + (sizeof(Arr1) / sizeof(Arr1[0]))); int Arg2 = 1; verify_case(1, Arg2, maxCards(Arg0, Arg1)); }
- void test_case_2() { int Arr0[] = {1, 4, 6, 7, 3}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arr1[] = {1, 7, 1, 5, 7}; vector <int> Arg1(Arr1, Arr1 + (sizeof(Arr1) / sizeof(Arr1[0]))); int Arg2 = 6; verify_case(2, Arg2, maxCards(Arg0, Arg1)); }
- void test_case_3() { int Arr0[] = {19, 99, 86, 30, 98, 68, 73, 92, 37, 69, 93, 28, 58, 36, 86, 32, 46, 34, 71, 29}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arr1[] = {28, 29, 22, 75, 78, 75, 39, 41, 5, 14, 100, 28, 51, 42, 9, 25, 12, 59, 98, 83}; vector <int> Arg1(Arr1, Arr1 + (sizeof(Arr1) / sizeof(Arr1[0]))); int Arg2 = 28; verify_case(3, Arg2, maxCards(Arg0, Arg1)); }
- // END CUT HERE
- };
- // BEGIN CUT HERE
- int main() {
- YetAnotherCardGame ___test;
- ___test.run_test(-1);
- return 0;
- }
- // END CUT HERE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement