제출 #1168327

#제출 시각아이디문제언어결과실행 시간메모리
1168327KaleemRazaSyed새로운 문제 (POI13_spa)C++20
100 / 100
3461 ms45400 KiB
#include<bits/stdc++.h>

using namespace std;

#define int long long

int read()
{
  string s;
  cin >> s;
  int res = 0;
  for(char c : s)
    res <<= 1, res += c - '0';
  return res;
}

signed main()
{
  ios::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  int n, k;
  cin >> n >> k;
  int x = read(), y = read();
  int a[k];
  for(int i = 0; i < k; i ++)
    a[i] = read();

  sort(a, a + k);

  queue<int> Q1, Q2;
  bool poss = (x == y);

  set<int> seen1, seen2;
  
  Q1.push(x);
  Q2.push(y);

  while(Q1.size() && Q2.size() && !poss)
    {
      if(Q1.size() > k && Q2.size() > k)
	poss = true;
      
      int u = Q1.front();
      Q1.pop();
      for(int i = 0; i < n; i ++)
	{
	  int v = u ^ (1LL << i);
	  if(binary_search(a, a + k, v)) continue;
	  if(seen2.count(v))
	    poss = true;
	  else if(!seen1.count(v))
	    seen1.insert(v), Q1.push(v);
	}

      u = Q2.front();
      Q2.pop();
      for(int i = 0; i < n; i ++)
	{	
	  int v = u ^ (1LL << i);
	  if(binary_search(a, a + k, v)) continue;
	  if(seen1.count(v))
	    poss = true;
	  else if(!seen2.count(v))
	    seen2.insert(v), Q2.push(v);
	}
    }
  
  cout << (poss ? "TAK" : "NIE") << endl;
  return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...