nyoj166 小珂的数学题
来源:互联网 发布:局域网网络管理 编辑:程序博客网 时间:2024/04/29 20:00
题目:点击打开链接
题目大意:给定一个字符串,该字符串是升序的,问它是字符串中的第几个?
思路:只要算出该字符串前面有多少个就可以了,然后加一就是最终答案,这里麻烦的是求该字符串前面有多少个,分为两部分,一部分是字符串长度小于该字符串的,另一部分是长度等于该字符串的但在该字符串前面的字符串!由于是字符串是升序的,即是n个字母只能组合成一个序列,那就应该对应着n个字母的组合数!
这里用到了一个组合数学的公式:,跟杨辉三角有点类似!
上码:
#include<iostream>#include<string> using namespace std; int c[27][27]; void get_c(){for(int i=0;i<27;i++){for(int j=0;j<27;j++){if(i==j||j=0){c[i][j]=1;}else{c[i][j]=c[i-1][j]+c[i-1][j-1];}}}c[0][0]=0;//这是组合数跟杨辉三角的区别!!!} bool is_asc(string str){for(int i=1;i<str.size();i++){if(str[i]<=str[i-1]){return false;}}return true;} int main(){string str;int ans,len;while(cin>>str){if(!is_asc(str)){cout<<0<<endl;continue;}len=str.size();ans=0;for(int i=1;i<len;i++){//字符串长度小于len的个数ans+=c[26][i];}for(int i=0;i<len;i++){//每个字母都要考虑到//每个字母选定后,后面的可能个数for(char ch=(i?’a’:str[i-1]+1);ch<str[i];ch++){ans+=c[‘z’-ch][len-1-i];}}cout<<++ans<<endl;}return 0;}
0 0
- nyoj166 小珂的数学题
- nyoj166-小珂的数学题
- NYOJ166 小珂的数学题(数位dp)
- 小珂的数学题
- 小明的数学题2
- xoj cie 1302 小明的数学题
- ACM小明的数学题Ⅲ
- ACM小明的数学题Ⅲ
- POJ 3737 小数学题
- ACM小明的数学题Ⅰ C++实现
- ACM小明的数学题ⅡC++实现
- 一道小小数学题,趣味逻辑的小鸡汤
- ACM小明的数学题Ⅰ C++实现
- ACM小明的数学题ⅡC++实现
- hdu 6108 小C的倍数问题 (数学题)
- 自动生成简单数学题的小程序范例
- NYOJ 330 一个简单的数学题【数学题】
- 一道古老的数学题
- git - 分支管理
- 嵌套矩形 动态规划
- android listview setselection 失效解决办法
- 使用CMake生成VS2010项目查看OpenCV源代码
- ios tableView那些事 (八) tableview的插入移动
- nyoj166 小珂的数学题
- 2-1
- 第五周项目一 体验常成员函数——平面坐标系类
- VC窗口自由的调整大小的实现
- [推荐]如何成为一个早起者。
- ubuntu 安装chrome
- ios tableView那些事 (九) tableview的删除
- BZOJ 1602 Usaco2008 Oct 牧场行走 倍增LCA
- JAVA_SE基础——1.JDK&JRE下载及安装