UVa 12377 - Number Coding
题目:一个数能够用一种素数元素的个数表示的形式,43560=23×32×51×112表示成41223;
第一个数是素因子的种类,第二个是每一个素因子的个数递增排列。给你一个这样的形式的串,
问原来的数可能有几种情况。
分析:数论,计数原理,组合数学。
对于每一个串,第一个数字一定是素因子的种类数。
首先,利用搜索找到全部剩余串的可能组合形式。
然后。求出每种情况下的组合数。加和就可以。
说明:注意一个新的数字不能以0開始。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio> using namespace std; int p[11],f[11];
char buf[22]; long long value(int s, int t)
{
long long V = 0LL;
for (int i = s ; i <= t ; ++ i) {
V *= 10LL;
V += buf[i]-'0';
}
return V;
} long long save[11];
long long temp[11];
long long dfs(int s, int l, int d, int n)
{
long long sum = 0LL;
if (d == n && s == l) {
sum = 0LL+p[n];
//去掉同样元素的内部排列
int count = 1;
for (int i = 1 ; i < d ; ++ i) {
if (save[i] == save[i-1])
count ++;
else {
sum /= f[count];
count = 1;
}
}
sum /= f[count];
}
for (int i = s ; i < l ; ++ i) {
save[d] = value(s, i);
if ((!d || save[d] >= save[d-1]) && buf[i+1] != '0') {
temp[d] = save[d];
sum += dfs(i+1, l, d+1, n);
save[d] = temp[d];
}
}
return sum;
} int main()
{
p[0] = 1; f[0] = 1;
for (int i = 1 ; i < 10 ; ++ i) {
p[i] = p[i-1]*(10-i);
f[i] = f[i-1]*i;
} int n,l,d;
while (~scanf("%d",&n))
for (int i = 1 ; i <= n ; ++ i) {
scanf("%s",buf);
l = strlen(buf);
cout << dfs(1, l, 0, buf[0]-'0') << endl;
}
return 0;
}
UVa 12377 - Number Coding的更多相关文章
- UVA 12377 Number Coding --DFS
题意:给一串数字,第一个数是Num的话,要使后面的数字组成Num个数,而且为不降的,将这Num个数分配到9个素因子上作为指数,问能组成多少个不同的数 解法:dfs一遍,看后面的数字能组成Num个不降数 ...
- UVA 1558 - Number Game(博弈dp)
UVA 1558 - Number Game 题目链接 题意:20之内的数字,每次能够选一个数字,然后它的倍数,还有其它已选数的倍数组合的数都不能再选,谁先不能选数谁就输了,问赢的方法 思路:利用dp ...
- uva 11885 - Number of Battlefields(矩阵高速幂)
题目连接:uva 11885 - Number of Battlefields 题目大意:给出周长p,问多少种形状的周长为p的,而且该图形的最小包围矩阵的周长也是p,不包含矩形. 解题思路:矩阵高速幂 ...
- UVA 10706 Number Sequence (找规律 + 打表 + 查找)
Problem B Number Sequence Input: standard input Output: standard output Time Limit: 1 second A singl ...
- uva 10706 Number Sequence(数学规律)
题目连接:10706 - Number Sequence 题目大意:有一个有0 ~ 9组成的序列,1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 ....就是第一位为1. ...
- UVA 11885 - Number of Battlefields(斐波那契)
11885 - Number of Battlefields 题意:给周长.求能围成的战场数目.不包含矩形. 思路:详细的递推没递推出来,可是看了网上一个规律,假设包含矩形的答案应该是斐波那契数列(可 ...
- UVA 10006_Carmichael number
题意: N 为合数,对于任意一个在(1,N)之间的数满足 anmodn=a,则称N为Carmichael number,对于给定的N,判断是否为Carmichael number. 分析: 素数区间筛 ...
- UVa 263 - Number Chains
题目:给你一个数字n0.将它的每一个位的数字按递增排序生成数a,按递减排序生成数b, 新的数字为n1 = a-b,下次依照相同方法计算n1,知道出现循环,问计算了多少次. 分析:数论.模拟.直接模拟计 ...
- UVa 11371 - Number Theory for Newbies
題目:給你一個數字n.將裡面每位的數又一次組合形成a,b.使得a-b最大且是9的倍數. 分析:數論. 題目要求a,b和n的位數同样,不能有前導0. 定理1:交換一個數字中的某兩個位的數,形成的新數組和 ...
随机推荐
- 【01】markdown特殊说明
[01]说明 Markdown 的目标是实现「易读易写」. 可读性,无论如何,都是最重要的.一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令 ...
- 对 Servlet 的改进
通过上一篇博客:Servlet 的详解 http://www.cnblogs.com/ysocean/p/6912191.html,我们大致知道了 Servlet 的基本用法.但是稍微分析一下 Ser ...
- c#笔记2018-12-27
using System; /*2018-12-27 c#学习笔记 * 1.c#判断if /else if /switch * 2.循环while/for/do-while * 3.循环实例: for ...
- C# 字符串型转数字型
// 当需要将字符串格式的数字转为数字时候,我们会用到的函数为Convert.ToDouble(),// 然而当你的字符串为49,9时,由于包含了逗号,函数会将逗号忽略,直接转为499,// 所以我们 ...
- Django深入----django.db.transaction
django 的事务: transaction.py atomic---原子性 def atomic(using=None, savepoint=True): # Bare decorator: @a ...
- nginx的简介和配置文件实例(一)
此文章配合 nginx配置文件解答 共同分享,了解. 一.nginx服务简介Nginx是一个高性能的HTTP和反向代理服务器 使用 Nginx 前必须了解的事项: 1)Nginx 本身只是一个 ...
- [Vijos1308]埃及分数(迭代加深搜索 + 剪枝)
传送门 迭代加深搜索是必须的,先枚举加数个数 然后搜索分母 这里有一个强大的剪枝,就是确定分母的范围 #include <cstdio> #include <cstring> ...
- BZOJ2244 [SDOI2011]拦截导弹 【cdq分治 + 树状数组】
题目 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度.并且能够拦截任意速度的导弹,但是以后每一发炮弹都不能高于前一发的高度,其 ...
- Vue && Angular 双向绑定检测不到对象属性的添加和删除
由于ES5的限制 Vue && Angular 双向绑定检测不到对象属性的添加和删除 还有数组增加索引.这些改变不会触发change事件.Vue是因为实例化的时候已经把各个属性都s ...
- spring security 登录、权限管理配置
登录流程 1)容器启动(MySecurityMetadataSource:loadResourceDefine加载系统资源与权限列表) 2)用户发出请求 3)过滤器拦截(MySecurityFil ...