POJ 1850 Code
来源:互联网 发布:算法1mints.txt 编辑:程序博客网 时间:2024/05/29 19:10
组合数学题。
给你一个序列,并给其编号,如
a - 1
b - 2
...
z - 26
ab - 27
...
az - 51
bc - 52
...
vwxyz - 83681
题目给出一个字符串,求这个字符串的编号。若不合法 (字符不递增),则输出0.
解法:求出排在这个字符串之前有多少个串,然后+1就是答案。因为这个字符串必须递增,设a[i][j],i为'z'-当前字符,j为后面还剩余的位数,由组合数学的知识,a[i][j]=C(i,j)。所以对于一个字符串来说,在他之前字符串的数量就是,长度小于该串以及,每一位上比前一位字符大,比当前字符小的字符为c,的a['z'-c][len-i-1].
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>using namespace std;int C[30][30];int main(){ int i,j,l,ans; char str[12],ite; C[0][0] = 1; for (i=1; i<30; i++) { for (j=0; j<=i; j++) C[i][j]=(j == 0)?C[i-1][j]:C[i-1][j-1]+C[i-1][j]; } scanf("%s",str); l=strlen(str); for (i=1; str[i] != '\0'; i++) { if (str[i-1] >= str[i]) { printf("0\n"); return 0; } } ite='a'; ans=0; for (i=1; i<l; i++) { ans+=C[26][i]; } for (i=0; str[i] != '\0'; i++) { while (ite < str[i]) { ans+=C['z'-ite][l-i-1]; ite++; } ite=str[i]+1; } printf("%d\n",ans+1);}
- poj 1850 Code
- poj 1850 Code
- poj 1850 code
- poj 1850 Code
- poj 1850 Code
- poj 1850 Code
- poj 1850 Code
- POJ 1850 Code
- POJ 1850 Code
- poj 1850 Code
- POJ 1850 Code
- poj 1850 Code
- POJ 1850 Code
- POJ 1850 Code
- POJ 1850--Code
- POJ 1850 Code
- POJ - 1850 Code
- POJ 1850 Code
- 往android的内核添加驱动及 ueventd.rc 修改
- wxpython 拖拽
- 从头开始学C
- learn iphone and ipad cocos2d Game Development读书笔记
- UDP协议详解与QUdpSocket编程
- POJ 1850 Code
- eval解析JSON中的注意点
- 通过JS自动隐藏手机浏览器的地址栏
- siverlight使用渐变效果实现遮罩效果
- Union 共用体
- Android多点触摸
- UNIX/LINUX 全局跳转
- leetcode4: Binary Tree Maximum Path Sum
- linux下socket通信常用的结构与头文件