POJ1850&&POJ1496
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 9236 | Accepted: 4405 |
Description
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
constraints:
• The word is maximum 10 letters length
• The English
alphabet has 26 characters.
Output
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的更多相关文章
- poj 算法 分类
转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 最近AC题:2528 更新时间:2011.09.22 ...
- POJ 水题(刷题)进阶
转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...
- 北大ACM试题分类+部分解题报告链接
转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...
- 北大ACM - POJ试题分类(转自EXP)
北大ACM - POJ试题分类 -- By EXP 2017-12-03 转载请注明出处: by EXP http://exp-blog.com/2018/06/28/pid-38/ 相关推荐文: 旧 ...
- 北大ACM - POJ试题分类
1.入门水题 可用于练手与增强自信 POJ-1003POJ-1004 POJ-1005 POJ-1207 POJ-3299 POJ-2159 POJ-1083POJ-3094 2.初级 2.1. 基本 ...
- poj1496 Word Index / poj1850 Code(组合数学)
poj1850 Code 题意:输出若干个给定的字符串($length<=10$)在字典序中的位置,字符串中的字母必须严格递增. 读取到非法字符串时,输出“0”,终止程序.(poj1496:继续 ...
- POJ1850——Code(组合数学)
Code DescriptionTransmitting and memorizing information is a task that requires different coding sys ...
- POJ1850 组合数学
POJ1850 问题重述: 用26个小写字母进行编码,编码规则如下: 1)每个编码中前一个字母必须小于后一个字母 2)编码按照长度从小到大排列,相同长度按字典序进行排列 输入一个字母串,求解该编码对应 ...
- 数位dp poj1850
题目链接:https://vjudge.net/problem/POJ-1850 这题我用的是数位dp,刚刚看了一下别人用排列组合,我脑子不行,想不出来. 在这题里面我把a看成1,其他的依次递增,如果 ...
随机推荐
- INTZ DX format
http://aras-p.info/texts/D3D9GPUHacks.html 格式 用法 资源 描述 NVIDIA GeForce AMD Radeon 英特尔 阴影映射 D3DFMT_D16 ...
- Python 把u'\xca\xd3\xc6\xb5\xd7\xa5\xc8\xa1' 输出正常中文
今天碰见从数据库读取出来数据是u'\xca\xd3\xc6\xb5\xd7\xa5\xc8\xa1',输出显示乱码,经常查询处理如下: 两种方式: 1. s = u'\xca\xd3\xc6\xb5\ ...
- 跟我一起透彻理解template模板模式
#include <iostream> using namespace std; //template模式. class Base { public: void DealWhat() { ...
- 移动web之响应式布局
1.响应式布局的概念 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念.简而言之.就是一个站点可以兼容多个终端--而不是为每一个终端做一个特定的版本号. 这个概念是为解决移动互 ...
- Node.js 使用jQuery取得Nodejs http服务端返回的JSON数组示例
server.js代码: // 内置http模块,提供了http服务器和客户端功能(path模块也是内置模块,而mime是附加模块) var http=require("http" ...
- perl学习笔记——输入与输出
读取标准输入 用<STDIN>进行标准输入:chomp($line=<STDIN>); 如果读到文件尾,行输入操作符就会返回undef.便可利用这一性质跳出循环. while( ...
- python sqlite3 MySQLdb
SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成. Python就 ...
- 懒人学习automake, Makefile.am,configure.ac(转)
已经存在Makefile.am,如何生成Makefile? 步骤: [root@localhost hello]# autoscan .///在当前文件夹中搜索 [root@localhost hel ...
- Servlet的API(二)
web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象.request和response对象既然代表请求和响应,那我们获取 ...
- Android+git+hudson+gradle持续集成
linux 主机 android sdk安装忽略 jdk安装忽略 hudson安装忽略 gradle安装 1:下载相应的gradle(这里是gradle-2.10-all.zip) 2 : 解 ...