Code
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 9236   Accepted: 4405

Description

Transmitting and memorizing information is a task that requires different coding systems for the best use of the available space. A well known system is that one where a number is associated to a character sequence. It is considered that the words are made only of small characters of the English alphabet a,b,c, ..., z (26 characters). From all these words we consider only those whose letters are in lexigraphical order (each character is smaller than the next character).

The coding system works like this:

• The words are arranged in the increasing order of their length.
• The
words with the same length are arranged in lexicographical order (the order from
the dictionary).
• We codify these words by their numbering, starting with
a, as follows:
a - 1
b - 2
...
z - 26
ab - 27
...
az
- 51
bc - 52
...
vwxyz - 83681
...

Specify for a given
word if it can be codified according to this coding system. For the affirmative
case specify its code.

Input

The only line contains a word. There are some
constraints:
• The word is maximum 10 letters length
• The English
alphabet has 26 characters.

Output

The output will contain the code of the given word, or
0 if the word can not be codified.

Sample Input

bf

Sample Output

55

Source

大致题意:(与POJ1496基本一致)

输出某个str字符串在字典中的位置,由于字典是从a=1开始的,因此str的位置值就是 在str前面所有字符串的个数 +1

规定输入的字符串必须是升序排列。不降序列是非法字符串

不要求用循环输入去输入若干组字符串,但若输入非法字符串则输出0,且结束程序,这是和POJ1496最猥琐的区别,很多同学只注意到规定str的长度不同,以为把str数组长度改一下直接复制就能AC再多刷一题了,殊不知老是WA却找不到原因,大概就是这里出问题了.本题Str最长为10个字符

#include<cstdio>
#include<cstring>
using namespace std;
#define N 1010
char str[N];
int fac(int x){
int s=;
for(int i=;i<=x;i++){
s*=i;
}
return s;
}
int C(int n,int m){//如果用常规的 以前的很笨的方法,会造成大数的溢出
return fac(n)/fac(m)*fac(n-m);
}
int com(int n,int k){
if(k==) return ;
return com(n-,k-)*n/k;
}
int main(){
scanf("%s",str);
int len=strlen(str);
int sum=;
for(int i=;i<len-;i++){//把前面的都加起来,看看这个字符串len-1个长度的+len-2……1的字符串一共有多少个
sum+=com(,i+);
}
for(int i=;i<len;i++){
for(int j=i+;j<len;j++){
if(str[i]>str[j]){//如果字符串不是按照升序排列的,那么要输出0;
puts("");return ;
}
}
}
for(int i=;i<len;i++){//看看当前的字符串在“本长度”中排在什么样的位置。
for(int j=(i==?:str[i-]-'a'+);j<str[i]-'a';j++){//现在依然是在计算 与当前字符串一样长度的字符串的数量(之前的 ~ )
sum+=com(-j-,len-i-);//这个组合是固定开头的字符,选取后面的!
}//计算的过程是比如说第一个位置是k,开始固定'a'那么以后的len-1个位置上就是从b~z中选出组合,然后再固定b再选,……
}//直到第一个位置是k本身,第一个位置枚举完了,枚举地二个位置,从a开始直到第二个位置的字符本身,依次类推,直到最后一个字符枚举完毕;then本字符串之前的就计算完了,因为这样枚举都是本字符串之前的
printf("%d\n",sum+);
return ;
}

那就再刷一遍POJ1496

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 1010
char str[N];
int fac(int x){
int s=;
for(int i=;i<=x;i++){
s*=i;
}
return s;
}
int C(int n,int m){
return fac(n)/fac(m)*fac(n-m);
}
int com(int n,int k){
if(k==) return ;
return com(n-,k-)*n/k;
}
int main(){
while(cin>>str){
int len=strlen(str);
int sum=,flag=;
for(int i=;i<len-;i++){
sum+=com(,i+);
}
for(int i=;i<len;i++){
for(int j=i+;j<len;j++){
if(str[i]>=str[j]){
puts("");flag=;i=len;break;
}
}
}
if(flag) continue;
for(int i=;i<len;i++){
for(int j=(i==?:str[i-]-'a'+);j<str[i]-'a';j++){
sum+=com(-j-,len-i-);
}
}
cout<<sum+<<endl;
}
return ;
}

POJ1850&&POJ1496的更多相关文章

  1. poj 算法 分类

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 最近AC题:2528   更新时间:2011.09.22  ...

  2. POJ 水题(刷题)进阶

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...

  3. 北大ACM试题分类+部分解题报告链接

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...

  4. 北大ACM - POJ试题分类(转自EXP)

    北大ACM - POJ试题分类 -- By EXP 2017-12-03 转载请注明出处: by EXP http://exp-blog.com/2018/06/28/pid-38/ 相关推荐文: 旧 ...

  5. 北大ACM - POJ试题分类

    1.入门水题 可用于练手与增强自信 POJ-1003POJ-1004 POJ-1005 POJ-1207 POJ-3299 POJ-2159 POJ-1083POJ-3094 2.初级 2.1. 基本 ...

  6. poj1496 Word Index / poj1850 Code(组合数学)

    poj1850 Code 题意:输出若干个给定的字符串($length<=10$)在字典序中的位置,字符串中的字母必须严格递增. 读取到非法字符串时,输出“0”,终止程序.(poj1496:继续 ...

  7. POJ1850——Code(组合数学)

    Code DescriptionTransmitting and memorizing information is a task that requires different coding sys ...

  8. POJ1850 组合数学

    POJ1850 问题重述: 用26个小写字母进行编码,编码规则如下: 1)每个编码中前一个字母必须小于后一个字母 2)编码按照长度从小到大排列,相同长度按字典序进行排列 输入一个字母串,求解该编码对应 ...

  9. 数位dp poj1850

    题目链接:https://vjudge.net/problem/POJ-1850 这题我用的是数位dp,刚刚看了一下别人用排列组合,我脑子不行,想不出来. 在这题里面我把a看成1,其他的依次递增,如果 ...

随机推荐

  1. C++之类成员所占内存大小问题总结

    1.空类所占字节数为1,可见代码如下 #include <iostream> using namespace std; class Parent { }; class Child:publ ...

  2. C++ 获取URL图片、html文件,CInternetSession 【转】

    http://blog.csdn.net/gnixuyil/article/details/7688439 获取网络图片 CString URL="http://www.google.com ...

  3. 弄清java中的字节与字符

    问题 在java中,一个字符等于多少字节? 或者更详细的问:在java中,一个英文字符等于多少字节?一个中文字符等于多少字节? 答案 Java采用unicode来表示字符,java中的一个char是2 ...

  4. j2ee、mvn、eclipse、Tomcat等中文乱码问题解决方法

    一.更改jdk默认编码为UTF-8,保证启动的JVM不会出现中文乱码问题 1.在编译的时候,如果我们没有用 -encoding 参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们 ...

  5. CentOS 7.2通过yum安装zabbix

    环境说明 系统版本    CentOS 7.2 x86_64 软件版本    yum安装zabbix 3.0.18 首先准备一台纯净的CentOS 7.2系统 1.配置zabbix源 [root@za ...

  6. 如何看一个VC工程具体是什么工程?

    VC6等可以创建MFC, Win32等工程,拿到一个工程,怎么判断是什么工程呢? VC6全文检索看看有没有theApp 如果有一般就是MFC的 (VS?)看看工程设置,入口点函数写的是什么,/subs ...

  7. 静态代码检查工具-PMD刚開始学习的人入门篇

    前言: PMD是一款静态代码分析工具.它能够自己主动检測各种潜在缺陷以及不安全或未优化的代码. PMD很多其它地是集中在预先检測缺陷上.它提供了高度可配置的丰富规则集,用户能够方便配置对待特定项目使用 ...

  8. 倍福TwinCAT(贝福Beckhoff)基础教程 松下绝对值驱动器如何做初始化设置

    安装调试软件PANATERM 6.0,完成之后可以自动检测到连接的设备(如果软件是之前的版本,则可能无法准确识别A5B系列)   点击试运行,伺服关闭,然后会发现伺服开启按钮可用了   测试正反转没有 ...

  9. Sql中常用的创建表 约束 主外键 增删改查的语句

    创建数据库 USE master; GO --日记数据库 create database DiaryBase on ( name=DiaryBase_Dat,--逻辑名称 FILENAME='c:\D ...

  10. 解析Json数据

    一.json数据 [{"}] 二.关键代码 public class MainActivity extends Activity { @Override protected void onC ...