2025.12.20 作业 - # P1246 编码
题目描述
编码工作常被运用于密文或压缩传输。这里我们用一种最简单的编码方式进行编码:把一些有规律的单词编成数字。
字母表中共有 \(26\) 个字母 \(\mathtt{a,b,c,\cdots,z}\),这些特殊的单词长度不超过 \(6\) 且字母按升序排列。把所有这样的单词放在一起,按字典顺序排列,一个单词的编码就对应着它在字典中的位置。
例如:
- \(\verb!a! \to 1\);
- \(\verb!b! \to 2\);
- \(\verb!z! \to 26\);
- \(\verb!ab! \to 27\);
- \(\verb!ac! \to 28\)。
你的任务就是对于所给的单词,求出它的编码。
输入格式
仅一行,被编码的单词。
输出格式
仅一行,对应的编码。如果单词不在字母表中,输出 \(0\)。
输入输出样例 #1
输入 #1
ab
输出 #1
27
#include <iostream>
using namespace std;
string s;
int c[28][28];
int n;
int main() {cin>>s;for (int i=0;i<s.size()-1;i++)if (s[i]>=s[i+1]) {cout<<0<<endl;return 0;}for (int i=0;i<=26;i++) c[i][0]=c[i][i]=1;for (int i=1;i<=26;i++)for (int j=1;j<=i-1;j++)c[i][j]=c[i-1][j]+c[i-1][j-1];n=s.length();long long Ans=0;for (int i=1;i<=n-1;i++) Ans+=c[26][i];int w1=0;for (int i=0;i<n;i++) {int w2=s[i]-'a'+1; //字符表的编号,a---1,b---2for (int k=w1+1;k<w2;k++) Ans+=c[26-k][n-1-i];w1=w2;}cout<<Ans+1<<endl;return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1201842.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!