「 Anigram單詞 」51nod 1095
阿新 • • 發佈:2018-12-15
解析
最終答案=單個字串排序後 雜湊值相同的個數 - 未排序時 字串相同的個數
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <set> #define LL long long using namespace std; const LL bse = 131; const LL mod = 212370440130137957 ; inline int wread(){ char c(getchar ());int wans(0),flag(1); while (c<'0' || c>'9'){if (c=='-') flag=-1;c=getchar ();} while (c>='0' && c<='9'){wans=wans*10+c-'0';c=getchar ();} return wans*=flag; } void init (){ freopen ("A.in","r",stdin); freopen ("A.out","w",stdout); } LL get_hash(char s[]){ int len(strlen(s)); LL ans(0); for (int i(0);i<len;++i) ans=(ans*bse+(LL)s[i])%mod; return ans; } int n,m; multiset <LL> cnt1; multiset <LL> cnt2; int main (){ // init (); n=wread(); for (int i(1);i<=n;++i){ char c[14]; scanf ("%s",c); cnt1.insert (get_hash(c)); sort (c,c+strlen (c)); cnt2.insert (get_hash(c)); } m=wread(); while (m--){ char c[14]; scanf ("%s",c); int num2(cnt1.count (get_hash(c))); sort (c,c+strlen (c)); int num1(cnt2.count (get_hash(c))); printf("%d\n",num1-num2); } return 0; }