记录编号 458880 评测结果 AAAAAAAAAA
题目名称 [POJ 1850] 编码 最终得分 100
用户昵称 Gravatarkonnyaku 是否通过 通过
代码语言 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;
}