题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3434

题意:

思路:

const int mod=10007;
const int N=100005;

int g[22][N];
int C[N][22],mou[N];
int h[22][N][13];

int prime[N],cnt;
int tag[N];

void init()
{
    int i,j;

    mou[1]=1;
    for(i=2;i<N;i++)
    {
        if(!tag[i])
        {
            prime[cnt++]=i;
            mou[i]=-1;
        }
        for(j=0;j<cnt;j++)
        {
            if(i*prime[j]>=N) break;
            tag[i*prime[j]]=1;
            if(i%prime[j]==0)
            {
                mou[i*prime[j]]=0;
                break;
            }
            else mou[i*prime[j]]=-mou[i];
        }
    }

    C[0][0]=1;
    for(i=1;i<N;i++)
    {
        C[i][0]=1;
        for(j=1;j<=i&&j<=20;j++)
        {
            C[i][j]=C[i-1][j-1]+C[i-1][j];
            if(C[i][j]>=mod) C[i][j]-=mod;
        }
    }
    int c;
    for(c=2;c<=20;c++)
    {
        for(i=1;i<N;i++) for(j=i;j<N;j+=i)
        {
            g[c][j]+=C[i-1][c-2]*mou[j/i];
            if(g[c][j]>=mod) g[c][j]-=mod;
            if(g[c][j]<0) g[c][j]+=mod;
        }
    }

    for(c=2;c<=20;c++)
    {
        for(i=1;i<N;i++)
        {
            int pre=1;
            int x=i;
            if(x>=mod) x%=mod;
            for(j=0;j<=11;j++)
            {
                h[c][i][j]=pre*g[c][i]%mod;
                h[c][i][j]+=h[c][i-1][j];
                if(h[c][i][j]>=mod) h[c][i][j]-=mod;
                pre=pre*x%mod;
            }
        }
    }
}

int n,cc,M[13];

struct node
{
    int a[15];

    int Max;

    void clear()
    {
        clr(a,0);
        Max=0;
    }

    void mul(int x1,int x0)
    {
        int i;
        int b[15];
        for(i=0;i<=Max;i++) b[i]=a[i]*x0%mod;
        b[Max+1]=0;

        for(i=0;i<=Max;i++)
        {
            b[i+1]=b[i+1]+a[i]*x1%mod;
            if(b[i+1]>=mod) b[i+1]-=mod;
        }

        for(i=0;i<=n;i++) a[i]=b[i];
        Max++;
    }

}A;

int cal(int d1,int d2)
{
    A.clear();
    A.a[0]=1;
    int i;
    for(i=1;i<=n;i++)
    {
        i64 tmp=M[i]/d1;
        int aa=-(i64)(tmp+1)*tmp/2%mod;
        int bb=M[i]%mod*tmp%mod;
        A.mul(aa,bb);
    }
    int ans=0;
    for(i=n;i>=0;i--)
    {
        ans+=A.a[i]*(h[cc][d2][i]-h[cc][d1-1][i])%mod;
        if(ans<0) ans+=mod;
        if(ans>=mod) ans-=mod;
    }
    return ans;
}

int main()
{
    init();

    int T=getInt();

    while(T--)
    {
        n=getInt();
        cc=getInt();
        int i;
        for(i=1;i<=n;i++) M[i]=getInt();
        sort(M+1,M+n+1);
        int ans=0;

        for(i=1;i<=M[1];)
        {
            int L=i;
            int R=M[1];

            int j;
            for(j=1;j<=n;j++)
            {
                R=min(R,M[j]/(M[j]/i));
            }

            ans+=cal(L,R);

            if(ans>=mod) ans-=mod;
            if(ans<0) ans+=mod;

            i=R+1;
        }
        printf("%d\n",ans);
    }
}

BZOJ 3434 时空穿梭的更多相关文章

  1. 【BZOJ3434】[Wc2014]时空穿梭 莫比乌斯反演

    [BZOJ3434][Wc2014]时空穿梭 Description Input 第一行包含一个正整数T,表示有T组数据求解每组数据包含两行,第一行包含两个正整数N,C(c>=2),分别表示空间 ...

  2. Vue2 实现时空穿梭框功能模块

    前言 这篇文章主要是分享一个时空穿梭框功能,也就是我们平时用的选择功能.勾选了的项就会进入到另一个框中. 时空穿梭框之旅 示例演示: 这个时空穿梭框实现了: 1.可以全选.反选 2.没有选中时,不可以 ...

  3. 【BZOJ】3434: [Wc2014]时空穿梭

    http://www.lydsy.com/JudgeOnline/problem.php?id=3434 题意:n维坐标中要找c个点使得c个点在一条线上且每一维的坐标单调递增且不能超过每一维限定的值m ...

  4. BZOJ 3434 [WC2014]时空穿梭 (莫比乌斯反演)

    题面:BZOJ传送门 洛谷传送门 好难啊..反演的终极题目 首先,本题的突破口在于直线的性质.不论是几维的空间,两点一定能确定一条直线 选取两个点作为最左下和最右上的点! 假设现在是二维空间,选取了$ ...

  5. UOJ#54 BZOJ3434 [WC2014]时空穿梭

    题目描述 小 X 驾驶着他的飞船准备穿梭过一个 \(n\) 维空间,这个空间里每个点的坐标可以用 \(n\) 个实数表示,即 \((x_1,x_2,\dots,x_n)\). 为了穿过这个空间,小 X ...

  6. BZOJ3434 [Wc2014]时空穿梭

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  7. BZOJ3434 WC2014时空穿梭(莫比乌斯反演)

    考虑枚举相邻点距离差的比例.显然应使比例值gcd为1以保证不重复统计.确定比例之后,各维坐标的方案数就可以分开考虑.设比例之和为k,则若坐标上限为m,该维坐标取值方案数即为Σm-ki (i=1~⌊m/ ...

  8. [WC2014]时空穿梭(莫比乌斯反演)

    https://www.cnblogs.com/CQzhangyu/p/7891363.html 不难推到$\sum\limits_{D=1}^{m_1}\sum\limits_{d|D}C_{d-1 ...

  9. UOJ 54 【WC2014】时空穿梭——莫比乌斯反演

    题目:http://uoj.ac/problem/54 想写20分. Subtask 2 就是枚举4个维度的值的比例,可算对于一个比例有多少个值可以选,然后就是组合数.结果好像不对. 因为模数太小,组 ...

随机推荐

  1. app_field.clear_dependent_fields

    可以调用APP_FIELD.clear_dependent_fields和APP_FIELD.set_dependent_field来将两个(或多个)Item建立关联,当一个为空时,另一个不可录入,反 ...

  2. 夺命雷公狗---DEDECMS----19dedecms栏目列表页的完成

    我们的栏目页表页的模版如果不清楚叫什么名,可以通过: 这里很清楚的记录着,我们来看下他: 他长得和我们以前做首页时候是不是很像呢?其实就是一样的,我们改下即可,如下所示: {dede:channel ...

  3. zw版【转发·台湾nvp系列Delphi例程】HALCON HWindowX 01

    zw版[转发·台湾nvp系列Delphi例程]HALCON HWindowX 01 procedure TForm1.Button1Click(Sender: TObject);var img : H ...

  4. :parent 匹配含有子元素或者文本的元素

    描述: 查找所有含有子元素或者文本的 td 元素 HTML 代码: <table> <tr><td>Value 1</td><td>< ...

  5. resultMap / resultType

    ===================resultMap:实体类的属性和通过resultMap映射后的property属性一致 <resultMap id="workerSelect& ...

  6. 【python cookbook】【字符串与文本】15.给字符串中的变量名做插值处理

    问题:想创建一个字符串,其中嵌入的变量名称会以变量的字符串值形式替换掉 解决方法:str.format().str.format_map() >>> s = '{name} has ...

  7. taglib指令

    taglib:用来引用标签库并设置标签库的前缀,(允许JSP页面使用用户自定义标签) 语法:<%@ taglib uri="tagLibraryURI" prefix=&qu ...

  8. MEANIO

    sudo npm install -g bower sudo npm install -g meanio sudo bower cache clean --allow-root sudo mean i ...

  9. 3.1将AngularJS放入上下文

    本章,作者将AngularJS放在全球web app开发的上下文里,并为后面的章节设置功能.AngularJS的目标,是带来一款工具,它有服务端开发web client的能力,并易于开发,测试,富.复 ...

  10. Linux下查看用户列表

    cat /etc/passwd 可以查看所有用户的列表 w 可以查看当前活跃的用户列表 cat /etc/group 查看用户组