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:交換一個數字中的某兩個位的數,形成的新數組和 ...
随机推荐
- js 百度云搜索框
// ==UserScript==// @name 百度云插件+APIKey// @namespace // @version 5.0.2.1// @description 在百度云网盘的页面添加一个 ...
- javamail腾讯企业邮箱发送邮件
此代码用的jar文件:mail.jar(1.4.5版本); 如果jdk用的是1.8版本会出现SSL错误:这个问题是jdk导致的,jdk1.8里面有一个jce的包,安全性机制导致的访问https会报错, ...
- tensorflow 如何限制显存大小
Python在用GPU跑模型的时候最好开多进程,因为很明显这种任务就是计算密集型的. 用进程池好管理,但是tensorflow默认情况会最大占用显存,尽管该任务并不需要这么多,因此我们可以设置显存的按 ...
- 设置vim配置文件使得tab为4个空格
1 set ts=4 2 set expandtab 3 set autoindent
- 第一阶段Sprint 对其他团队评价
咱们的team 针对对“小学生网页四则运算”这个产品的评审,本人提出建议:1.第一阶段的产品Sprint不够好,无任务看板.无燃尽图.希望完善该产品的的Sprint,第二阶段的Sprint要认真写好. ...
- Maven部署异常:on project standalone-pom: Cannot deploy artifact from the local repository解决方法
MAVEN部署异常 org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache. ...
- BZOJ 4824 [Cqoi2017]老C的键盘 ——树形DP
每一个限制条件相当于一条有向边, 忽略边的方向,就成了一道裸的树形DP题 同BZOJ3167 唯一的区别就是这个$O(n^3)$能过 #include <map> #include < ...
- RSA工作原理
摘自:http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html 一.基础数论 1.互质关系 如果两个正整数,除了1以外,没有 ...
- 【HDOJ5978】To begin or not to begin(概率)
题意:有k个黑球和1个红球,两个轮流抽,抽到红球算赢,问先手赢的概率大还是后手大还是相等 k<=1e5 思路:手算前几项概率 大胆猜想 #include<cstdio> #inclu ...
- 无记录时显示gridview表头,并增加一行显示“没有记录”【绑定SqlDataSource控件时】
原文发布时间为:2008-08-04 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...