码迷,mamicode.com
首页 > Web开发 > 详细

[JSOI 2015] 子集选取

时间:2018-03-08 15:56:19      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:www   lin   sub   mst   ret   png   水题   clu   ref   

4475: [Jsoi2015]子集选取

Time Limit: 1 Sec  Memory Limit: 512 MB
Submit: 363  Solved: 255
[Submit][Status][Discuss]

Description

技术分享图片

Input

输入包含一行两个整数N和K,1<=N,K<=10^9

Output

一行一个整数,表示不同方案数目模1,000,000,007的值。

Sample Input

2 2

Sample Output

16

HINT

 

Source

 
能看出来的话就是大水题,看不出来可能一直懵逼2333
首先每个元素互不影响,所以可以算出 S={1}的方案之后n次幂即可。
那么S={1}的方案数就是 选出一些A为0,其他的为1,而且任意一个1的右下方不能有0.
画一个图就可以发现,这样的0,1分布只能是从中间一条线分开。
分割点可以一开始在Ak,1的左下方,每次可以向右或者向上移动一个单位,并且总是能k步之后到达边界(也就是分割完成)
所以这部分的答案是 2^k。
所以最后答案直接就是 2^(n*k).
#include<bits/stdc++.h>
#define ll long long
#define ha 1000000007
using namespace std;
int n,k,x,ans;
int main(){
	scanf("%d%d",&n,&k);
	k=n*(ll)k%(ha-1);
	ans=1,x=2;
	for(;k;k>>=1,x=x*(ll)x%ha) if(k&1) ans=ans*(ll)x%ha;
	printf("%d\n",ans);
	return 0;
}

  

[JSOI 2015] 子集选取

标签:www   lin   sub   mst   ret   png   水题   clu   ref   

原文地址:https://www.cnblogs.com/JYYHH/p/8528546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!