[SDOI2013] 스프링 (검색 + + 해시 포함 및 제외)

문제의 의미

을 감안할 때 \ (N- \) 마다 여섯 개 무게, 시간, 정확히 찾을 \ (K \) 시간의 로그에 해당하는 무게의 수와 동일

생각

때문에 무게가 다시 해시 할 때마다 동일한 다음 해당하는 중량 값을 열거 할 수 있습니다 동일한 무게, 소수의, 당신은 얼마나 많은 시간이 무게를 얻을 수 있습니다

그러나 분명히이 계산은 예를 들어, 네 개의 무게 동시에 그 다음 혐오감을 받기 시작 할 수있는 세 개의 무게와 동일합니다 반복

세트 (\ F_i는 \) 적어도 것을 나타낸다 \는 (\가 I)을 제공하는, 즉, 상기 어레이 쌍을 찾는 시간의 로그에 대응하는 가중치와 동일 \ (G_i는 \) 을 정확하게 나타내는 \ (나는 \) 가중치 번째 동일한 시간에 대응하는 횟수, 즉 응답

보여야 \ (f_i- G_i = \는 {G_J 시그마} (I는 J \ 당량이. 6) \ <) 이지만 실제로 \ (F_i는 \) 이상의있을 것이다 \ (G_J \) 와 같은 \ (j = 도 5는 전 = 3 \) 때, \은 (는 F_3 \) 한다 ) (g_5의 \를 \ 되는 함께 임의로 세 값은 추가한다 \) \ (C (5,3)

상기에서 본 \ (G \) 방정식한다 (\ g_i f_i- 시그마 = \ { g_j * C (j, I)} (나는 \)의 J \의 당량 6 <)

암호

#include<bits/stdc++.h>
#define N 1000005
#define re register
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ull base = 1000000007;
int n,k,a[N][7],st[7],top;
ll f[8],g[8],C[10][10];
ull has[N];

template <class T>
void read(T &x)
{
    char c;int sign=1;
    while((c=getchar())>'9'||c<'0') if(c=='-') sign=-1; x=c-48;
    while((c=getchar())>='0'&&c<='9') x=x*10+c-48; x*=sign;
}

void deal()
{
    for(re int i=1;i<=n;++i)
    {
        has[i]=0;
        for(re int j=1;j<=top;++j) has[i]=has[i]*base+a[i][st[j]]+1;
    }
    sort(has+1,has+n+1);
    ll len=0;
    for(re int i=1;i<=n;++i)
    {
        if(has[i]!=has[i-1])
        {
            f[top]+=(len-1)*len/2;
            len=1;
        }
        else ++len;
    }
    f[top]+=(len-1)*len/2;
}
int main()
{
    C[1][0]=C[1][1]=1;
    for(re int i=2;i<10;++i)
    {
        C[i][0]=1;
        for(re int j=1;j<=i;++j)
        C[i][j]=C[i-1][j-1]+C[i-1][j];
    }
    read(n);read(k);
    for(re int i=1;i<=n;++i)
      for(re int j=1;j<=6;++j)
        read(a[i][j]);
    for(re int i=0;i<64;++i)
    {
        top=0;
        for(re int j=0;j<6;++j) if(i>>j&1) st[++top]=j+1;
        deal();
    }
    for(re int i=6;i>=k;--i)
    {
        g[i]=f[i];
        for(re int j=i+1;j<=6;++j)
        g[i]-=g[j]*C[j][i];
    }
    cout<<g[k]<<endl;
    return 0;
}

추천

출처www.cnblogs.com/Chtholly/p/11628189.html