题目链接: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. Maven打jar包

    <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactI ...

  2. wireshark抓包

    ip.addr==IP地址(192.168.1.100)&& http

  3. Windows 10 访问网络共享 总是提示用户名或密码不正确的解决方法

    今天同事在Windows10上共享了一些文件,其他使用Windows 7的同事都可以正常使用,唯独我是使用Windows 10操作系统的,和别人输入一样的用户名和密码,却总是告诉我:用户名或密码不正确 ...

  4. sql多表查询(out join,inner join, left join, right join)

    left join以左表为基准显示所有左表的信息,在on中有符合条件的其他表也显示出来 right join则相反 inner join的只显示on中符合条件的 1 使用多个表格 在「world」资料 ...

  5. JavaSPI机制学习笔记

    最近在阅读框架源代码时,常常看到 SPI 的子包, 忍不住查了下: Service Provider Interface : 服务提供接口. JavaSPI 实际上是“基于接口的编程+策略模式+配置文 ...

  6. 爱普生 RS330 打印机墨水连供装置墨盒吸墨复位方法

    芯片复位方法: 先按充墨键(墨水灯按键),一下一下按,把墨车按停到右侧换墨盒的位置为止(就是右侧框框正中位置), 全程带电操作,停到换墨盒的位置后再按住芯片复位键(墨盒芯片上面白色的小按键)5秒以上再 ...

  7. bootstrap实现 手机端滑动效果,滑动到下一页,jgestures.js插件

    bootstrap能否实现 手机端滑动效果,滑动到下一页 jgestures.js插件可以解决,只需要引入一个JS文件<script src="js/jgestures.min.js& ...

  8. JavaScript调试技巧之console.log()详解

    JavaScript调试技巧之console.log()详解 对于JavaScript程序的调试,相比于alert(),使用console.log()是一种更好的方式,原因在于:alert()函数会阻 ...

  9. pstack使用和原理【转】

    转自:http://www.cnblogs.com/mumuxinfei/p/4366708.html 前言: 最近小组在组织<<深入剖析Nginx>>的读书会, 里面作者提到 ...

  10. jython学习笔记3

    1.os.environ["HOME"] 为什么这句话在我的STS中打印不出东西,还报错 Method Description close() Close file fileno( ...