Advertisement
Guest User

Untitled

a guest
Apr 29th, 2018
590
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.06 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define pb push_back
  3. #define CLR(a) memset(a, 0, sizeof a)
  4. #define SETDP(a) memset(a, -1, sizeof a)
  5. #define SETINF(a) memset(a, 127, sizeof a)
  6. using namespace std;
  7. typedef long long ll;
  8. typedef pair<int, int>pii;
  9. struct S
  10. {
  11.     ll a, c, g, t;
  12.     S()
  13.     {
  14.         a=c=g=t=0;
  15.     }
  16. };
  17. vector<S>masks[4100];
  18. vector<string>strings;
  19. ll nmasks, n, m, k;
  20. int have[27][4110];
  21. bool chkmask(int id)
  22. {
  23.     for(int i=0; i<n; i++)
  24.     {
  25.         if(i==id)continue;
  26.         int diff=0;
  27.         for(int j=0; j<nmasks; j++)
  28.         {
  29.             ll maska=masks[id][j].a^masks[i][j].a;
  30.             ll maskc=masks[id][j].c^masks[i][j].c;
  31.             ll maskg=masks[id][j].g^masks[i][j].g;
  32.             ll maskt=masks[id][j].t^masks[i][j].t;
  33.             diff+=__builtin_popcountll(maska);
  34.             diff+=__builtin_popcountll(maskc);
  35.             diff+=__builtin_popcountll(maskg);
  36.             diff+=__builtin_popcountll(maskt);
  37.         }
  38.         if(diff!=k*2)return false;
  39.     }
  40.     return true;
  41. }
  42. int main()
  43. {
  44.     ios_base::sync_with_stdio(false), cin.tie(0);
  45.     cin>>n>>m>>k;
  46.     nmasks=ceil( (double)m/(double)(62));
  47.     for(int i=0; i<n; i++)
  48.     {
  49.         string s;
  50.         cin>>s;
  51.         strings.pb(s);
  52.         for(ll start=0; start<nmasks; start++)
  53.         {
  54.             S cur;
  55.             for(ll j=0; j+start*62<min( (start+1)*62, m); j++)
  56.             {
  57.                 if(s[j+start*62]=='A')cur.a+=(1LL<<j);
  58.                 else if(s[j+start*62]=='C')cur.c+=(1LL<<j);
  59.                 else if(s[j+start*62]=='T')cur.t+=(1LL<<j);
  60.                 else cur.g+=(1LL<<j);
  61.             }
  62.             masks[i].pb(cur);
  63.         }
  64.         for(int j=0; j<m; j++)
  65.             have[s[j]-'A'][j]++;
  66.     }
  67.     for(int i=0; i<n; i++)
  68.     {
  69.         int diff=0;
  70.         for(int j=0; j<m; j++)
  71.             diff+=(n-have[strings[i][j]-'A'][j]);
  72.         if(diff==k*(n-1))
  73.         {
  74.             if(chkmask(i))
  75.             {
  76.                 cout<<i+1<<"\n";
  77.                 return 0;
  78.             }
  79.         }
  80.     }
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement