Submission #1286910

#TimeUsernameProblemLanguageResultExecution timeMemory
1286910iq500Vještica (COCI16_vjestica)C++20
160 / 160
70 ms7824 KiB
//kanser bitmask sorusu <3 //journey - deco*27 #include <bits/stdc++.h> using namespace std; int com[(1<<16)][26], ans[1<<16], gh=0; int cnt[16][26], n; string str[16]; int lfms_bt(int x){ int cnt=0; while(x){ cnt++; x/=2; } return cnt-1; //buraya dikkat! } int f(int s){ //cout<<s<<" "<<ans[s]<<" gh\n"; if(ans[s]!=-1) return ans[s]; //s=0 ve 1 stringi kapsar int add=INT_MAX; for(int t=(s-1)&s; t!=0; t=(t-1)&s){ //cout<<s<<" "<<t<<" "<<(s^t)<<" :( \n"; add=min(add, f(t)+f(s^t)); } int ort=0; for(int i=0; i<26; i++){ ort+=com[s][i]; } //cout<<add<<" "<<ort<<" ? "; ans[s]=add-ort; //cout<<s<<" "<<ans[s]<<" döndürür\n"; return ans[s]; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n; memset(cnt, 0, sizeof(cnt)); for(int k=0; k<(1<<n); k++) ans[k]=-1; ans[0]=0; for(int i=0; i<n; i++){ cin>>str[i]; for(int j=0; j<str[i].length(); j++){ cnt[i][str[i][j]-'a']++; } ans[(1<<i)]=str[i].length(); } for(int i=0; i<26; i++) com[0][i]=37373737; for(int k=1; k<(1<<n); k++){ //her set için ortakları bulma int x=lfms_bt(k); int dec=k^(1<<x); for(int i=0; i<26; i++){ com[k][i]=min(cnt[x][i], com[dec][i]); } } cout<<f((1<<n)-1)+1; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...