1KB 过题同时最优解
查看原帖
1KB 过题同时最优解
484006
sqrtDataStructure楼主2024/1/18 21:13
#import<bits/stdc++.h>
using namespace std;
#define R(i,a,b)for(u i=a;i<=b;++i)
using u=unsigned;u n,m,q;const u kN=1<<18;const u B=131;vector<u>H[kN];u gh(string s){u r=0;for(auto&c:s)r=r*B+c;return r;}string t[kN],D;vector<u>z[kN];pair<u,u>Q[kN];u a[kN];u A[kN];int main(){ios::sync_with_stdio(false);cin>>n>>m>>q;R(i,1,n){cin>>D;H[D.size()].push_back(gh(D));}R(i,1,m)cin>>t[i];R(i,1,q)cin>>Q[i].first>>Q[i].second;R(L,1,1e5)if(!H[L].empty()){u P=1;R(i,1,L)P*=B;u b=H[L].size()/32+1;R(j,0,b-1)z[j].clear();map<u,u>M;for(auto v:H[L])++M[v];u c=0;for(auto[k,C]:M){if(C>b){R(i,1,m){u o=0,g=0;R(j,0,t[i].size()-1){o=o*B+t[i][j];if(j>=L)o-=t[i][j-L]*P;if(j+1>=L&&o==k){g=1;break;}}A[i]=g;}R(i,1,q)a[i]+=C*(A[Q[i].first]&&A[Q[i].second]);}else R(i,1,C)z[c++].push_back(k),c%=b;}R(F,0,b-1)if(z[F].size()){map<u,u>V;for(u j=0;j<z[F].size();++j)V[z[F][j]]=j;R(i,1,m){A[i]=0;u o=0;R(j,0,t[i].size()-1){o=o*B+t[i][j];if(j>=L)o-=t[i][j-L]*P;if(j+1>=L&&V.count(o))A[i]|=(1u<<V[o]);}}R(i,1,q)a[i]+=popcount(A[Q[i].first]&A[Q[i].second]);}}R(i,1,q)cout<<a[i]<<'\n';}

有人玩 Code Golf 吗(时间或长度更优都可以)。对于代码长度悬赏 10r!

要求:不能是我这份改的。我的代码的思路题解没有。:)

2024/1/18 21:13
加载中...