爆0求条
查看原帖
爆0求条
776799
GODTREE楼主2025/8/29 12:51
#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
namespace zxy
{int n,k;const int N=1e5+5;int a[N][7],f[7],g[7],tmp[7];bool vis[N][7];struct node{int sum;int pos;};
ull hah(int x,int u)//for evey case hash it into a number
{ull res=x;for (int i=1;i<=u;i++){res*=998244353;}return res;}
bool cmp(node a,node b) {return a.sum<b.sum;}
void dfs(int u)//cal every case
{if (u>6) return;for (int i=tmp[u-1]+1;i<=6;i++){tmp[u]=i;dfs(u+1);}
vector<node> v;for(int i=1;i<=n;i++)
{for(int j=1;j<=u;j++){int sum=0;sum+=hah(a[i][tmp[j]],tmp[j]);v.push_back({sum,i});}}
sort(v.begin(),v.end(),cmp);for(int i=0;i<n-1;i++)
{if(v[i].sum==v[i-1].sum){vis[v[i].pos][u]=1,vis[v[i-1].pos][u]=1;}
if(v[i].sum==v[i+1].sum){vis[v[i].pos][u]=1,vis[v[i+1].pos][u]=1;}}}
void cnt()//count f[i]
{for(int i=1;i<=6;i++)
{for (int j=1;j<=n;j++){f[i]+=vis[j][i];}}}
int C[15][15];void cal()//predeal C[i][j]
{C[0][0]=1;for(int i=1;i<=14;i++){C[i][0]=1;
for(int j=1;j<=i;j++){C[i][j]=C[i-1][j]+C[i-1][j-1];}}}
int main()
{scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){for(int j=1;j<=6;j++){scanf("%d",&a[i][j]);}}//input
dfs(1);cnt();cal();
for(int i=6;i>=1;i--){g[i]=f[i];
for(int j=i+1;j<=6;j++){g[i]-=g[j]*C[i][j];}}printf("%d",g[k]);
return 0;}}
int main(){zxy::main();return 0;}
2025/8/29 12:51
加载中...