链接 参考代码: #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = (1<<24)+10; int F[maxn]; int cout_one(int x){ int ret=0; while (x){ if(x&1){ ret++; } x>>=1; } return ret; } int main(){ int n; scanf("%d",&n); char ss[4]; for(int i=1;i<=n;i++){ scanf("%s",ss); int tp=0; for(int j=0;j<3;j++){ tp|=(1<<(ss[j]-'a')); } for(int j=tp;j>0;j=(j-1)&tp){//快速枚举子集 if(cout_one(j)&1){ F[j]++; } else{ F[j]--; } } } for(int i=0;i<=23;i++){ for(int j=0;j<(1<<24);j++){ if((j>>i)&1){ F[j]+=F[j^(1<<i)]; } } } ll ans=0; for(int i=0;i<1<<24;i++){ ans^=1ll*F[i]*F[i]; } printf("%lld\n",ans); return 0; }