P11909 [NHSPC 2023] H. 整数的回文分解法
题目描述
H 教授是一位密码学专家,他现在正在研究如何对一个正整数做特殊分解,因而发明了正整数的回文分解法,其分解方法如下:对于一个正整数 nnn,把 nnn 分解成 kkk 个正整数 x1,x2,…,xkx_1, x_2, \ldots, x_kx1,x2,…,xk 的和,满足 n=x1+x2+…+xkn = x_1 + x_2 + \ldots + x_kn=x1+x2+…+xk,且 x1,x2,…,xkx_1, x_2, \ldots, x_kx1,x2,…,xk 由左读到右和由右读到左相同。
当两种分解法分解出来的正整数数量不同,或者出现的次序不同时,则视为不同的分解法。更严谨地说,设 n=a1+a2+…+ak=b1+b2+…+bln = a_1 + a_2 + \ldots + a_k = b_1 + b_2 + \ldots + b_ln=a1+a2+…+ak=b1+b2+…+bl 为两种回文分解法。若 k≠lk \ne lk=l,或者 k=lk = lk=l 但存在 i∈{1,2,…,k}i \in \{1, 2, \ldots, k\}i∈{1,2,…,k} 使得 ai≠bia_i \ne b_iai=bi,则视为不同的分解法。例如正整数 666 有 888 种回文分解法,分别是
- 666;
- 2+2+22 + 2 + 22+2+2;
- 3+33 + 33+3;
- 2+1+1+22 + 1 + 1 + 22+1+1+2;
- 1+4+11 + 4 + 11+4+1;
- 1+1+2+1+11 + 1 + 2 + 1 + 11+1+2+1+1;
- 1+2+2+11 + 2 + 2 + 11+2+2+1;
- 1+1+1+1+1+11 + 1 + 1 + 1 + 1 + 11+1+1+1+1+1。
给定一个正整数 nnn,请写一个计算机程序去计算 nnn 有多少种不同的回文分解法。因为这个数字可能很大,你只要求出方法数除以 109+710^9 + 7109+7 的余数就行了。
输入格式
ttt
n1n_1n1
n2n_2n2
⋮\vdots⋮
ntn_tnt
- ttt 代表你的计算机程序需要处理的正整数 nnn 的个数。
- nin_ini 代表第 iii 笔询问的正整数 nnn。
输出格式
ans1\textrm{ans}_1ans1
ans2\textrm{ans}_2ans2
⋮\vdots⋮
anst\textrm{ans}_tanst
- ansi\textrm{ans}_iansi 代表 nin_ini 的回文分解方法数除以 109+710^9 + 7109+7 的余数。
输入输出样例 #1
输入 #1
2
3
6
输出 #1
2
8
说明/提示
测试数据限制
- 1≤t≤1041 \le t \le 10^41≤t≤104。
- 1≤ni≤10151 \le n_i \le 10^{15}1≤ni≤1015。
- 输入的数皆为整数。
评分说明
本题共有四组子任务,条件限制如下所示。
每一组可有一或多个测试数据,该组所有测试数据皆需答对才可获得该组分数。
| 子任务 | 分数 | 额外输入限制 |
|---|---|---|
| 1 | 101010 | 输入的 nin_ini 两两相异,且 ni≤30n_i \le 30ni≤30 |
| 2 | 303030 | ni≤1000n_i \le 1000ni≤1000 |
| 3 | 101010 | ni≤106n_i \le 10^6ni≤106 |
| 4 | 505050 | 无额外限制 |
C++实现
#include<bits/stdc++.h>
using namespace std;
long long t,n,jl;
int main(){
ios::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
cin>>t;
while(t--){
cin>>n;jl=1;
long long x=n/2,z=2;
while(1){
if(x==0) break;
if(x%2==1)
jl=(jl*z)%1000000007;
z=(z*z)%1000000007;
x=x/2;
}
cout<<jl<<"\n";
}
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
用C++实现信奥 P11909 NHSPC 2023 H. 整数的回文分解法&spm=1001.2101.3001.5002&articleId=152114758&d=1&t=3&u=e55227d96be64341907c5e62d3156eed)

被折叠的 条评论
为什么被折叠?



