前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2013年多校 hdu 4602

2013年多校 hdu 4602

作者头像
用户2965768
发布2018-09-29 11:35:25
2890
发布2018-09-29 11:35:25
举报
文章被收录于专栏:wym

题目传送门

遇事不决先打表:

打表代码

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
int num[1000];
deque<int> a,b;
void dfs(int n,int _n)
{
	if(n==0)
	{
		while(_n--)
		{int t=a.front();
		 num[t]++;
		 a.pop_front();
		 a.push_back(t);
		}
		return ;
	}
	for(int i=1;i<=n;i++)
	{
		a.push_back(i);
		dfs(n-i,_n+1);
		a.pop_back();
	}
}
int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		memset(num,0,sizeof(num));
		a.clear();
		dfs(n,0);
		for(int i=1;i<=n;i++)
		printf("%d %d\n",i,num[i]);
		printf("\n");
	}	
  return 0;
} 

打表发现:

有规律,公式快速幂求解,存在不合法数据

代码语言:javascript
复制
#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
const long long MOD=1e9+7;
long long quick(long long a,long long b)
{
	long long ans=1;
	for(;b;b>>=1,a=a*a%MOD)
	{
		if(b&1)
		ans=ans*a%MOD;
	}
	ans%=MOD;
	return ans;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
	    long long n,k;
	    scanf("%lld %lld",&n,&k);
	    k=n-k;
	    if(k<0)
	    printf("0\n");
	    else
	    if(k<2)
	    {
	    	if(k==1)printf("2\n");
	    	else printf("1\n");
		}
		else 
		printf("%lld\n",((k+3)%MOD*quick(2,k-2)%MOD)%MOD);
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年09月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档