列表

详情


NC205078. 莫的难题

描述

埋和莫曾经是好朋友。埋是文科学霸,而莫却只是一个 OI 蒟蒻。一天,埋碰到一道难题跑来问莫。题目是这样的:有五个数字,分别是 5、2、1、3、9.莫可以取任意数字,每个数字可以取无限次。如:取两个 5,则组合为:55;取 2 与 1,则组合为:21。现在要问你所有组合中第 C(n, m)%1e9+7 (n>=m) 个数有多大?

输入描述

第 1 行一个数 t,表示询问的次数
接下来 t 行,每行两个数 n, m;详情见题目描述。
数据范围:
对于20%的数据,保证t=1
对于10%的数据,保证n=m
对于所有数据,保证
1<=t<=1000
1<=m<=n<=100

输出描述

t行,每行一个数字,表示所有组合中第 C(n, m)%1e9+7 (n>=m) 个大的数?

示例1

输入:

2
3 2
4 3

输出:

3
5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 484K, 提交时间: 2020-08-17 20:55:28

#include <bits/stdc++.h>
using namespace std;
int t;
int a[5]={1,2,3,5,9};
int sanjiao[115][115];
int p[115]; 
int mod=1e9+7; 
int main()
{
	cin>>t;
	sanjiao[1][1]=1;
	for(int i=2;i<=110;i++)//杨辉三角 
		for(int j=1;j<=i;j++)
			sanjiao[i][j]=(sanjiao[i-1][j-1]+sanjiao[i-1][j])%mod;
	while(t--){
		int n,m;
		cin>>n>>m;
		int k=sanjiao[n+1][m+1],tt=0;
		while(k)//转为五进制
		{
			k--;
			p[tt++]=a[k%5];
			k/=5;
		}
		for(int i=tt-1;i>=0;i--)cout<<p[i];
		cout<<endl; 
	}
}

上一题