记录编号 |
458880 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[POJ 1850] 编码 |
最终得分 |
100 |
用户昵称 |
konnyaku |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.004 s |
提交时间 |
2017-10-11 21:40:13 |
内存使用 |
0.32 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int st[27]={0};
int n=0,formor;
int cod=0;
struct digit
{
int e[28];
};
digit c[27];
int MAX=0;
bool abl=true;
void orts(int k)//k>=2
{
for(int i=1;i<=26-k;i++)// 1 ~ 26-k+1
{
c[k].e[i]+=c[k].e[i-1];//26-(k-1)+1
c[k].e[i+1]=c[k-1].e[28-k]-c[k-1].e[i+1]+1;
}
c[k].e[27-k]+=c[k].e[26-k];
c[k+1].e[0]=c[k].e[27-k]+1;
if(k<n)
orts(k+1);
else
return;
}
int main()
{
freopen("poj1850.in","r",stdin);
freopen("poj1850.out","w",stdout);
char x;
while(cin>>x)
{
n++;
st[n]=x-'a'+1;
if(st[n]<=st[n-1])
abl=false;
}
if(abl)
{
for(int i=1;i<=26;i++)
c[1].e[i]=i;
c[2].e[0]=27;
orts(2);
int r=0,N=n+1;
cod+=c[n].e[ st[N-n] ];
formor=st[N-n]+1;
n--;
while(n>0)
{
cod+=c[n].e[ st[N-n] ]-c[n].e[formor];
formor=st[N-n]+1;
n--;
}
cout<<cod;
}
else
cout<<0;
return 0;
}