bzoj4402: Claris的剑

先挖坑,明天再补吧

先把代码上了也无妨

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define N 2000006
#define P 1000000007

using namespace std;
int pow2(int x,int y){
	int ret=1;
	while (y){
		if (y&1) ret=(ll)ret*x%P;
		x=(ll)x*x%P;
		y=y>>1;
	}
	return ret;
}

int fact[N],fm;
int c(int n,int m){
	if (n<m) return 0;
	return (ll)fact[n]*fm%P*pow2(fact[n-m],P-2)%P;
}
int n,m;

int main(){
	scanf("%d%d",&n,&m);
	if (m<2||n<2){printf("%d\n",max(m,0));return 0;}
	for (int i=fact[0]=1;i<=n/2+m/2+3;++i) fact[i]=(ll)fact[i-1]*i%P;
	int ans=2,now[2]={1,0};
	fm=pow2(fact[m-2],P-2);
	for (int i=3;i<=n;++i){
		(now[i&1]+=now[1^i&1])%=P;
		if ((i-m-1)%2==0) (now[1^m&1]-=c((i-m-1)/2+m-2,m-2)-P)%=P;
		(ans+=(now[0]+now[1])%P)%=P;
	}
	printf("%d\n",ans);
	return 0;
}

  

时间: 2024-10-16 06:39:05

bzoj4402: Claris的剑的相关文章

acm hdu p2547 无剑无我{水水水}

无剑无我 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4112    Accepted Submission(s): 2638 Problem Description 北宋末年,奸臣当道,宦官掌权,外侮日亟,辽军再犯.时下战火连连,烽烟四起,哀鸿遍野,民不聊生,又有众多能人异士群起而反,天下志士云集响应,景粮影从. 值此危急存亡之秋

十年磨一剑,霜刃未曾试——杀猪越货利器放送

这是南方七月一个风少雨多,杀猪越货的早晨. 混迹于IT圈多年,自制若干攻击利器,后门木马等,个人一直低调在用,基本上从未示众,借用唐朝贾岛同学的话说就是"十年磨一剑,霜刃未曾试.". 今早,就在今早,公布吧--所谓技术这东西,似乎.好像不能一辈子(尤其是在天朝):何况长江后浪推前浪,前浪必然挂在沙滩上:与其被挂,不如主动让路,做后来者的人梯,让生命成为桥梁(^_*).再次套用贾岛同学的话就是"今日把示君,谁有不平事?". 好了,废话和牢骚一大通,下面进入正题.今天公

【剑指offer】Q38:数字在数组中出现的次数

与折半查找是同一个模式,不同的是,在这里不在查找某个确定的值,而是查找确定值所在的上下边界. def getBounder(data, k, start, end, low_bound = False): if end < start : return -1 while start <= end: mid = ( start + end ) >> 1 if data[ mid ] > k: end = mid - 1 elif data[ mid ] < k: star

【剑指offer】树的子结构

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25907685 剑指offer第18题,九度OJ上测试通过! 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1<=m<=1000):n代表将要输入的二叉树A的节点个数(节点从1开始计数),m代表将要输入的二叉树B的节点个数(节点从1开始计数).

【剑指offer】二叉树的镜像

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25915971 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点的个数(节点从1开始编号).接下来一行有n个数字,代表第i个二叉树节点的元素的值.接下来有n行,每行有一个字母Ci.Ci='d'表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号.C

剑指offer 复杂链表的复制

题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路:要进行深拷贝,需要每次都new一个节点出来,利用unordered_map, 2.3 138. Copy List with Random Pointer https://leetcode.com/problems/copy-list-with-random-poi

剑指offer30题

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 看到这个 题目,第一想法就是,我要不定义一个变量,指向当前栈中最小的值,每次入栈,就和最小值进行比较,如果比最小值小,则最小值指向该值,否则最小值依旧. 但很快遇到问题,如果在出栈时,最小值出来后,比最小值小的值呢?无法查到了啊! 于是思路出来了,用一个辅助栈,第一次将入栈的值放入,接下来每一次,和栈顶的值进行比较,如果比它小,则将该值放入,否则把栈顶的值再次放入. 此题参考剑指offer书的思路. 下面附代码. packa

【剑指offer】数组中仅仅出现一次的数字(1)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27649027 题目描写叙述: 一个整型数组里除了两个数字之外,其它的数字都出现了两次.请敲代码找出这两个仅仅出现一次的数字. 输入: 每一个測试案例包括两行: 第一行包括一个整数n,表示数组大小.2<=n <= 10^6. 第二行包括n个整数,表示数组元素,元素均为int. 输出: 相应每一个測试案例.输出数组中仅仅出现一次的两个数.输出的数字从小到大的顺序. 例子输入: 8 2 4

C后端设计开发 - 第1章-流派-入我华山,学我剑法

正文 第1章-流派-入我华山,学我剑法 后记 如果有错误, 欢迎指正. 有好的补充, 和疑问欢迎交流, 一块提高. 在此谢谢大家了.