poj 1850/poj 1496
http://poj.org/problem?id=1850 -----------------http://poj.org/problem?id=1496 两题解法类似。。
本题为组合数学的题,要求所给字符串在排列中的位置。所用的方法为暴力枚举。
对于长度为1的字符串有a,b,c,d.......26个;
长度为2的字符串有 a开头时有ab,ac,ad,ae,af.....(25,1) 25个 //()为组合数
b开头时有bc,bd,de,.....(24,1) 24个
c开头时有cd,ce,cf。。。(23,1) 23个
。。。。。。。
y开头时有yz (1,1) 1个。
所以长度为2的字符串共有 (25,1)+(24,1)+(23,1)+(22,1)。。。。=(26,2);
同理 长度为3时 共有 (26,3)个; 长度为4时有(26,4)个。。。。。 对于长度小于所给字符串的串,,直接相加即可,。。而对于长度等于所给字符串的串需要挨位枚举。。
例如:对于所给串为 dghei 长度等于它的串的个数应这样枚举:
第一位,应从‘a’开始一直枚举到‘c’,,,但是对于‘a’来说 还有‘z’-‘a’个比‘a’大的字符,后边还有4个位置空着,所以仅对于这一位来说是((‘z’-‘a’),4);
第二位, 应从比‘d’的字符开始枚举,因为题目要求是非降序列。。其他类似。。。 1 #include<iostream>
#include<cstring>
using namespace std;
int c[][];
int main(){
for(int i=;i<=;i++)//初始化。。
for(int j=;j<=;j++){
if(!j||i==j)
c[i][j] = ;
else
c[i][j] = c[i-][j-]+c[i-][j];
}
c[][] = ;
char str[];
while(cin>>str){
int len = strlen(str);
for(int i=;i<len;i++){
if(str[i]<=str[i-]){
cout<<<<endl;
return ;
}
}
int sum = ;
for(int i=;i<len;i++)//比所求字符串短的字符串
sum += c[][i];
//枚举字符串的每一位
for(int i=;i<len;i++){
char cu = !i?'a':str[i-]+;//如果是第一位,就从‘a’开始枚举改位的取值,其余的从比前一位大1的位置开始
while(cu<=str[i]-){
sum+= c['z'-cu][len-i-];//剩余的字母数记为‘z’-cu,而还需要选len-(i+1)个
cu++;//继续枚举,直到仅比改为小1;
}
}
sum += ;//加上该字符串本身,,因为之前最大就到该位-1
cout<<sum<<endl;
}
return ;
}
poj 1850/poj 1496的更多相关文章
- POJ 1496 POJ 1850 组合计数
Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8256 Accepted: 3906 Description Tran ...
- 【POJ 1850】 Code
[POJ 1850] Code 还是非常想说 数位dp真的非常方便! !. 数位dp真的非常方便!.! 数位dp真的非常方便! !! 重要的事说三遍 该题转换规则跟进制差点儿相同 到z时进一位 如az ...
- POJ 1850 Code(组合数)
http://poj.org/problem?id=1850 题意 :给定字符串,系统是用字符串组成的,字符串是按字典序排的.编码系统有三条规则,1这些的单词的长度是由小到大的,2相同长度的按字母在字 ...
- poj 1850 code(组合数学)
题目:http://poj.org/problem?id=1850 题意:按给定的规则给字母编号. 一个很简单的题目,但是却做了好久.................................. ...
- POJ 1850 Code
组合数学.... Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7202 Accepted: 3361 Descrip ...
- Code(poj 1850)
大致题意:(与POJ1496基本一致) 输出某个str字符串在字典中的位置,由于字典是从a=1开始的,因此str的位置值就是 在str前面所有字符串的个数 +1 规定输入的字符串必须是升序排列.不降序 ...
- POJ 1850 Code 字符串 难度:1
题意: 1 如果是严格升序的字母字符串,那么可以输出非0解码,否则不能译码输出0 2 字符串解码 遵循递增原则,其值为 到现在为止的所有按字母序小于该字符串的数量 + 1; #include < ...
- POJ 1850
#include <iostream> #include <string> using namespace std; int fac(int num); int C(int n ...
- poj 1850 1019 (简单位数dp)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; ][],l,a ...
随机推荐
- Android利用Fiddler进行网络数据抓包,手机抓包工具汇总
Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...
- CCNA实验(3) -- RIP
RIP协议分为版本1和版本2,均具备以下特征:1.是距离向量路由协议2.使用跳数(Hop Count)作为度量值3.默认路由更新周期为30秒4.管理距离(AD)为1205.支持触发更新6.最大跳数为1 ...
- ios数组基本用法和排序
1.创建数组 // 创建一个空的数组 NSArray *array = [NSArray array]; // 创建有1个元素的数组 array = [NSArray arrayWithObject: ...
- frame.origin.x 的意思和作用?
frame.origin.x 的意思和作用? scrollView.frame 一个view的frame 包含它的矩形形状(size)的长和宽. 和它在父视图中的坐标原点(origin)x和y坐标 f ...
- c# 遍历文件夹及其所有文件
利用VS创建一个winform应用程序,遍历指定文件夹(photos)内的所有文件夹及其文件.具体程序如下: namespace 遍历文件夹及其所有文件 { public partial class ...
- mac的svn之cornerstone简易教程
链接地址:http://jingyan.baidu.com/article/9989c74612a55af648ecfef2.html 背景: 关于cornerstone的介绍很少: 这里介绍mac的 ...
- WinSock网络编程基础(2)客户端
接下来说一下如何用WinSock创建基于TCP/IP模型的客户端和服务器. TCP可以提供两个计算机间可靠无误的数据传输,应用程序使用TCP通信时,会在两台计算机之间建立一个虚拟连接,连接之后计算机之 ...
- OptiScroll 公共例子(只修改了滚动条颜色)
地址:https://github.com/wilsonfletcher/Optiscroll <!DOCTYPE html> <html> <head> < ...
- 使用Apache的rewrite技术
做PHP项目中需要用到URL重定向技术,基本上的需求就是把比如 /user/heiyeluren 重定向到 /user.php?uid=heiyeluren 之类的URL上,当然,你也可以把 /art ...
- android-适配Adapter
Adapter是把数据和用户界面视图绑定到一起的桥梁类,负责创建用来表示父视图中的每一个条目的子视图,并提供对底层数据的访问. public class MainActivity extends Ac ...