Submission #117492

#TimeUsernameProblemLanguageResultExecution timeMemory
117492ckodserGenetics (BOI18_genetics)C++14
46 / 100
2092 ms29156 KiB
#include <algorithm> #include <bitset> #include <complex> #include <deque> #include <exception> #include <fstream> #include <functional> #include <iomanip> #include <ios> #include <iosfwd> #include <iostream> #include <istream> #include <iterator> #include <limits> #include <list> #include <locale> #include <map> #include <memory> #include <new> #include <numeric> #include <ostream> #include <queue> #include <set> #include <sstream> #include <stack> #include <stdexcept> #include <streambuf> #include <string> #include <typeinfo> #include <utility> #include <valarray> #include <vector> #if __cplusplus >= 201103L #include <array> #include <atomic> #include <chrono> #include <condition_variable> #include <forward_list> #include <future> #include <initializer_list> #include <mutex> #include <random> #include <ratio> #include <regex> #include <scoped_allocator> #include <system_error> #include <thread> #include <tuple> #include <typeindex> #include <type_traits> #include <unordered_map> #include <unordered_set> #endif int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);} #define ll int #define pb push_back #define ld long double #define mp make_pair #define F first #define S second #define pii pair<ll,ll> using namespace :: std; const ll maxn=4110; const ll maxg=100; string s[maxn]; bitset<maxn> bi[maxn][4]; bool hast[maxg][maxn]; ll sz[maxg]; ll cnt[maxg][maxn][4]; ll n,m,k,rk; bitset<maxn> vis[maxn]; bitset<maxn> ASS[maxn]; bool canBeAns(ll i){ for(ll y=0;y<maxg;y++){ ll ans=0; ll szz=sz[y]; for(ll j=0;j<m;j++){ ans+=cnt[y][j][s[i][j]]; } if(hast[y][i]){ ans-=m; szz--; } if(ans!=szz*(m-rk)){ return 0; } } return 1; } ll dif(ll i,ll j){ ll ans=0; for(ll y=0;y<4;y++){ ans+=(bi[i][y]^bi[j][y]).count(); } return ans; } bool is_good(ll i,ll j){ if(vis[i][j])return ASS[i][j]; bool b=(dif(i,j)==k); vis[i][j]=1; vis[j][i]=1; ASS[i][j]=b; ASS[j][i]=b; return b; } bool isAns(ll a){ for(ll i=0;i<n;i++){ if(i!=a){ if(!is_good(i,a)){ return 0; } } } return 1; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>m>>k; rk=k; k*=2; for(ll i=0;i<n;i++){ cin>>s[i]; } for(ll i=0;i<n;i++){ for(ll j=0;j<m;j++){ if(s[i][j]=='A')s[i][j]=0; if(s[i][j]=='C')s[i][j]=1; if(s[i][j]=='T')s[i][j]=2; if(s[i][j]=='G')s[i][j]=3; bi[i][s[i][j]][j]=1; } for(ll y=0;y<maxg;y++){ if(rand()%2==0){ hast[y][i]=1; sz[y]++; for(ll j=0;j<m;j++){ cnt[y][j][s[i][j]]++; } } } } set<ll> st; for(ll i=0;i<n;i++){ if(canBeAns(i)){ cout<<i+1; return 0; bool b=0; for(auto e:st){ if(!is_good(e,i)){ st.erase(e); b=1; break; } } if(!b){ st.insert(i); } } } for(auto e:st){ if(isAns(e)){ cout<<e+1; return 0; } } }

Compilation message (stderr)

genetics.cpp: In function 'bool canBeAns(int)':
genetics.cpp:90:26: warning: array subscript has type 'char' [-Wchar-subscripts]
    ans+=cnt[y][j][s[i][j]];
                          ^
genetics.cpp: In function 'int main()':
genetics.cpp:143:17: warning: array subscript has type 'char' [-Wchar-subscripts]
    bi[i][s[i][j]][j]=1;
                 ^
genetics.cpp:150:23: warning: array subscript has type 'char' [-Wchar-subscripts]
      cnt[y][j][s[i][j]]++;
                       ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...