题目传送门(内部题145)


输入格式

  从$math.in$读入数据。
  第一行两个数,为$n,q$。接下来$q$行每行一个数$m$,询问大小为$m$的$A$一共有多少个。


输出格式

  输出答案到$math.out$。
  共$q$行,每行一个数,表示方案数$\mod 10000019$。


样例

样例输入1:

3 3
0
1
2

样例输出1:

0
2
2

样例输入2:

100 4
45
50
60
70

样例输出2:

2085406
6657572
7844331
0


数据范围与提示

样例解释:

  对于第一个样例,$P=\{1,2,3\}$,$A$可以选$\{1\},\{2\},\{1,3\},\{2,3\}$,大小为$1$的两种,大小为$2$的也有两种。对于第二个样例,我想到了一个绝妙的解释,可惜这里写不下。

数据范围:

$subtask1:20pts,n,m,q\leqslant 20$。
$subtask2:30pts,n,m,q\leqslant 5,000$。
$subtask3:30pts,n,m\leqslant 10,000,000,q\leqslant 100,000$。
$subtask4:20pts,n,m\leqslant 10^{18},q\leqslant 100,000$。


题解

又是找规律,但是我为什么总是找不出来。

先说一下我考场上的做法,因为$x$和$2x$不能在一个集合,所以$x$和$4x$就必须在一个集合,以此类推,$\Theta(n^2)DP$就有了。

然后发现相同的$n$其实就是杨辉三角中的一行乘上一个系数,二分找到是哪一行就好了……

时间复杂度:$\Theta(q\log_{mod} n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
const int mod=10000019;
long long n,m;
int q;
long long fac[mod],inv[mod];
long long cnt,base,val=1;
long long qpow(long long x,long long y)
{
long long res=1;
if(y<0)return 0;
while(y)
{
if(y&1)res=res*x%mod;
x=x*x%mod;y>>=1;
}
return res;
}
void pre_work()
{
fac[0]=1;
for(int i=1;i<mod;i++)fac[i]=fac[i-1]*i%mod;
inv[mod-1]=qpow(fac[mod-1],mod-2);
for(int i=mod-1;i;i--)inv[i-1]=inv[i]*i%mod;
}
long long lucas(long long x,long long y)
{
if(x<y)return 0;
return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
long long C(long long x,long long y)
{
if(!y)return 1;
return lucas(x%mod,y%mod)*C(x/mod,y/mod)%mod;
}
int main()
{
pre_work();
scanf("%lld%d",&n,&q);
for(long long i=1,j=2;j<=n*2;i++,j<<=1)
{
long long L=1,R=n+1;
long long l=1,r=n+1;
while(l<r)
{
long long mid=(l+r)>>1;
if(ceil(log2(n/mid+1))>i)l=mid+1;
else r=mid;
}
while(L<R)
{
long long mid=(L+R)>>1;
if(ceil(log2(n/mid+1))>=i)L=mid+1;
else R=mid;
}
long long x;
if(L&1)x=(L-l)/2;
else x=(L-l+1)/2;
base+=i/2*x;
if(i&1)cnt+=x;
else val=val*qpow(2,x%(mod-1))%mod;
}
while(q--)
{
scanf("%lld",&m);
m-=base;
if(m<0||cnt<m)puts("0");
else printf("%lld\n",val*C(cnt,m)%mod);
}
return 0;
}

rp++

[CSP-S模拟测试]:数学课(找规律+数学)的更多相关文章

  1. [CSP-S模拟测试]:排列组合(数学 or 找规律)

    题目描述 $T$组数据,每次给定$n$,请求出下式的值,对$10^9+7$取模: $$C_n^0\times C_n^0+C_n^1\times C_n^1+C_n^2\times C_n^2+... ...

  2. [CSP-S模拟测试]:B(DP+数学)

    题目传送门(内部题45) 输入格式 第一行$3$个整数$n,m,P$.第二行$m$个整数,表示$m$次询问. 输出格式 一行$m$个整数表示答案. 样例 样例输入1: 2 4 40 1 2 3 样例输 ...

  3. [CSP-S模拟测试]:次芝麻(数学)

    题目描述 小$K$和小$X$都是小次货.身为小次货,最重要的事情就是次啦!所以他们正在纠结如何分芝麻次.一开始,小$K$有$n$个芝麻,小$X$有$m$个芝麻.因为他们都想次更多芝麻,所以每次手中芝麻 ...

  4. Codeforces 1091D New Year and the Permutation Concatenation 找规律,数学 B

    Codeforces 1091D New Year and the Permutation Concatenation https://codeforces.com/contest/1091/prob ...

  5. [CSP-S模拟测试]:题(DP+数学)

    题目描述 出个题就好了.这就是出题人没有写题目背景的原因.你在平面直角坐标系上.你一开始位于$(0,0)$.每次可以在上/下/左/右四个方向中选一个走一步.即:从$(x,y)$走到$(x,y+1),( ...

  6. [CSP-S模拟测试]:旋转子段(数学)

    题目描述 $ZYL$有$N$张牌编号分别为$1,2,...,N$.他把这$N$张牌打乱排成一排,然后他要做一次旋转使得旋转后固定点尽可能多.如果第$i$个位置的牌的编号为$i$,我们就称之为固定点.旋 ...

  7. [CSP-S模拟测试]:画作(BFS+数学)

    题目描述 小$G$的喜欢作画,尤其喜欢仅使用黑白两色作画.画作可以抽象成一个$r\times c$大小的$01$矩阵.现在小$G$构思好了了他的画作,准备动笔开始作画.初始时画布是全白的,他每一次下笔 ...

  8. [CSP-S模拟测试]:斯诺(snow)(数学+前缀和+树状数组)

    题目传送门(内部题37) 输入格式 第一行一个整数$n$,表示区间的长度. 第二行一个长度为$n$的只包含$0,1,2$的字符串,表示给出的序列. 输出格式 一行一个整数,表示革命的区间的数量. 样例 ...

  9. HDU 1577 WisKey的眼神 (找规律 数学)

    题目链接 Problem DescriptionWisKey的眼镜有500多度,所以眼神不大好,而且他有个习惯,就是走路喜欢看着地(不是为了拣钱哦^_^),所以大家下次碰见他的时候最好主动打下招呼,呵 ...

随机推荐

  1. [js]$.ajax标准写法

    $.ajax({     url:"http://www.microsoft.com",    //请求的url地址     dataType:"json",  ...

  2. dva中的一些备忘

    dva/router就是react-router-dom dva/router里的routerRedux就是react-router-redux 一个react的单页面应用: 编写一个基础框架,包含单 ...

  3. 微信小程序点击复制功能

    wx.setClipboardData({ data: '这是要复制的文字', success: function (res) { wx.showModal({ title: '提示', conten ...

  4. Spring与junit4集成测试

    一.应用场景:普通java web集成spring test, 项目结构:使用的是加入jar的方式,不是maven加入依赖的方式 注意:如果是引入jar包的方式,例如:spring-test4.0.5 ...

  5. 用Python输出一个Fibonacci数列

    斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列” 用文字来说, ...

  6. 怎么处理Win7系统备份还原提示代码0x80042302的错误?

    我们都知道Win7系统自带备份还原功能,可以在电脑遇到小问题时通过还原至之前备份的正常系统来解决,非常的方便.但是有些用户在使用备份还原功能时,系统会提示0x80042302错误,这该怎么办呢?下面好 ...

  7. AlertDialog 对话框 5种

    MainActivity.class public class MainActivity extends AppCompatActivity implements View.OnClickListen ...

  8. MySQL查询数据库中所有数据表的数据条数

    select table_name,table_rows from information_schema.tables where TABLE_SCHEMA = '数据库名称' order by ta ...

  9. 通过maven命令将源代码编译成jar到本地仓库

    图: 4.2.3        采用maven命令编译成jar安装到本地maven库 在路径框输入cmd,执行命令: mvn clean install 图: 图2 成功后可以看到jar包

  10. facenet中pairs文件制作

    1.对图片进行重命名 """Rename the image based on the folder name""" import os i ...