题目链接: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. EBS登陆链接网址

    SELECT home_url FROM icx_parameters; SELECT profile_option_value FROM fnd_profile_option_values WHER ...

  2. 夺命雷公狗ThinkPHP项目之----企业网站11之栏目的删除完成

    我们删除要在分类模型中添加一个_before_delete的钩子函数,而且在删除一个分类时候,如果这个分类有子分类就不允许删除 model层代码如下所示: <?php namespace Adm ...

  3. 三层与MVC

    三层架构(3-tier architecture) 我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一 ...

  4. Linux设备驱动工程师之路——内核链表的使用【转】

    本文转载自:http://blog.csdn.net/forever_key/article/details/6798685 Linux设备驱动工程师之路——内核链表的使用 K-Style 转载请注明 ...

  5. Asp.Net Mvc视图引擎Razor介绍

    1.Razor介绍 1)ASP.NET MVC3 带来了一种新的名为Razor 的视图引擎,提供了下列优点: Razor 的语法简单且清晰,只需要最小化的输入 Razor 容易学习,语法类似于 C#  ...

  6. crontab 日志备份定时任务

    -l选项,查看当前用户的所有定时任务: [xiluhua@vm-xiluhua][/home]$ crontab -l * * * * * /home/xiluhua/shell_script/log ...

  7. org.apache.commons.httpclient

    org.apache.commons.httpclient /** * post 方法 * @param url * @param params * @return */ public static ...

  8. Hibernate,get()和load()区别

    最主要区别在于,检索策略不同. 无论get和load,首先都会去session缓存中看有没有现成的数据.没有的话,get会采用立即检索策略.即:将对象从数据库检索出来并返回,不使用代理类.load的话 ...

  9. Centos7 安装配置NFS

    一.安装 NFS 服务器所需的软件包 # yum install -y nfs-utils 二.编辑exports文件 # vim /etc/exports /data/disk1/video *(a ...

  10. Hive报错之java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory

    一.问题: 在使用Hive0.11进行select查询的时候报: hive,),site from zhifu; Total MapReduce jobs Launching Job out In o ...