poj 1496
预处理后求解。
代码:
#include<iostream> #include<fstream> using namespace std; int a[5][30]; int b[5][30]; void read(){ // ifstream cin("in.txt"); int i,j,k; char c[10]; for(i=0;i<26;i++) { b[0][i]=i+1; } for(k=1;k<=4;k++) for(i=0;i<26;i++) { a[k][i]=b[k-1][25]-b[k-1][i]; if(i>0) b[k][i]=b[k][i-1]+a[k][i]; else b[k][i]=a[k][i]; } while(cin>>c){ for(i=0;i<strlen(c);i++) if(i+1<strlen(c)&&c[i]>=c[i+1]) break; if(i<strlen(c)) cout<<0<<endl; else { j=0; int len=strlen(c); k=len-1; for(i=0;i<len;i++) { j+=b[k--][c[i]-'a']; } cout<<j<<endl; } } } int main(){ read(); return 0; }