https://www.luogu.com.cn/problem/P5123
https://www.luogu.com.cn/record/177570261
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=5e4+10;
int a[N][6],f[6],n;string s[6][200000];int tail[6];
map <string,int> tr[6];
vector <int> S[6];
string str(int x)
{
int y=x;
string st="",temp="";
while (y)
{
int u=y/10;u*=10;
char t=(y-u)+'0';
st+=t;
y/=10;
}
for (int i=st.size()-1;i>=0;i--) temp+=st[i];
return temp;
}
signed main()
{
scanf("%lld",&n);
for (int i=1;i<=n;i++) scanf("%lld %lld %lld %lld %lld",&a[i][1],&a[i][2],&a[i][3],&a[i][4],&a[i][5]);
for (int i=1;i<=n;i++) sort(a[i]+1,a[i]+6);
for (int i=1;i<=n;i++) for (int j=2;j<=5;j++) if (a[i][j]==a[i][j-1]) a[i][j]=-1;
for (int i=1;i<(1<<5);i++) S[__builtin_popcount(i)].push_back(i);
f[0]=1ll*(n-1)*n/2;
for (int p=1;p<=5;p++)
{
for (int e : S[p])
{
for (int i=1;i<=n;i++)
{
int x=e,q=5;
string st="";
while (x)
{
if (x & 1) st+=(" "+str(a[i][q]));
x>>=1;
q--;
}
tr[p][st]++;
if (tr[p][st]==1) s[p][++tail[p]]=st;//;cout<<"PP"<<p<<" "<<st<<endl;
}
}
}
for (int p=1;p<=5;p++)
{
for (int i=1;i<=tail[p];i++)
{
int x=tr[p][s[p][i]];
f[p]+=(x*(x-1)/2);
}
}
cout<<f[0]-f[1]+f[2]-f[3]+f[4]-f[5]<<endl;
return 0;
}
第一个给出hack根据 n 的规模给 (20−n) RMB