题目链接: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. android模拟器启动没有拨号功能

    网上查询了很多资料, 其中一位网友给出的结论是android 4.3模拟器的bug, 如果在通讯录中添加好友,也是可以进行拨号的. 总结: 自认为是SDK安装程序不完整或设置AVD模拟器的时候设置项出 ...

  2. JetBrains WebStorm 8 注册码

    UserName:William===== LICENSE BEGIN =====45550-1204201000001SzFN0n1bPII7FnAxnt0DDOPJAINauvJkeVJBuE5b ...

  3. 关于ScrollView中嵌套listview焦点滑动问题 解决

    (第三种,第四种简单推荐使用) 在这里我要提出的是,listview能滚动的前提是:当listview本身的高度小于listview里的子view. 第一种方法 只需在MainActivity中 找到 ...

  4. 69道Java Spring 面试&笔试题

    目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spri ...

  5. iOS从健康app中获取步数信息

    统计步数信息并不需要我们自己去实现,iOS自带的健康app已经为我们统计好了步数数据 我们只要使用HealthKit框架从健康app中获取这个数据信息就可以了 1.如下图所示 在Xcode中打开Hea ...

  6. linux下用core和gdb查询出现"段错误"的地方【转】

    转自:http://blog.chinaunix.net/uid-30091091-id-5754288.html 原文地址:linux下用core和gdb查询出现"段错误"的地方 ...

  7. 14 个 grep 命令的例子 【转】

    转自:https://linux.cn/article-5453-1.html 编译自:http://www.linuxtechi.com/linux-grep-command-with-14-dif ...

  8. Hive文件格式

    hive文件存储格式包括以下几类: 1.TEXTFILE 2.SEQUENCEFILE 3.RCFILE 4.ORCFILE(0.11以后出现) 其中TEXTFILE为默认格式,建表时不指定默认为这个 ...

  9. HTML5 拖拽复制功能的实现方法

    Internet Explorer 9FirefoxOpera 12ChromeSafari 5 v1.0代码部分 <!DOCTYPE html><html><head& ...

  10. java 面试每日一题

    题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? import java.util.Scanner; public cl ...