题目传送门(内部题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. 【原创】大叔经验分享(74)nginx对静态文件加速

    通过location配置 location ~ \.html$ { add_header 'Cache-Control' 'no-cache'; } location ~ \.(js|css|gif| ...

  2. JavaScript例子3-对多选框进行操作,输出选中的多选框的个数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Mac EI 10.11.3 MySQL5.7.11 .dmg 安装(便捷设置,密码重置,卸载)

    MySQL 5.7+ 安装成功以后会弹出一个临时密码 后面需要通过临时密码设置新的密码 重置root密码:安装成功后,使用临时密码登陆:敲入命令,mysqladmin -u root -p passw ...

  4. 用jquery写出图片自动轮播效果

    相关代码如下,只要把代码粘贴进编辑器,修改图片路径,即可看到效果. 1.html部分 <body>   <ul class="banner">   < ...

  5. useradd 报Creating mailbox file: File exists

    问题描述:增加一个用户时,报下面的错误:[root@master ~]# useradd hadoopuseradd: warning: the home directory already exis ...

  6. 安装openblas库

    http://www.openblas.net/ Linux:下载源码直接make即可

  7. deep_learning_Function_sklearn.preprocessing.LabelBinarizer()

    在多数的机器学习比赛中,给出的标签都是非数字化的,所以我们需要对其进行转换.代码如下: from sklearn import preprocessing feature = [[0,1], [1,1 ...

  8. VM虚拟机下centos安装。

    centOS 7安装步骤: 1.选择新建虚拟机,稍后安装,linux选centos7 64位 2.位置改到存放虚拟机的文件夹 3.把硬盘空间改到40g,内存分到4g,1处理器2个核心 4 更改cd/d ...

  9. 4.5. scrapy两大爬虫类_Spider

    一:Spider Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取 的 ...

  10. 执行nvidia-smi出错

    执行nvidia-smi出错 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make su ...