度度熊的暗语
Problem Description
我们都知道,地球上有一种神秘的生物———程序猿;
但是,也许你不知道,还有一种更神秘的生物:度度熊!
度度熊的神秘之处在于他只说暗语,暗语由一串英文字母组成(‘a'到’z',以及由‘A'到’Z“)。
假设:
一、字母‘a’代表的值为1(即value(a)==1,‘b’为2,......,‘z’为26;
二、1一大写字母相当于其对应的2个小写字母,如bBb和bbbb是等价的;
三、如果出现连续的相同自负,如aaaa......(连续k个a),这k个a的总权值会编程k*k*value(a);比如,如bBb与bbbb,它们所对应的总权值都是4*4*2=32.
你能计算出度度熊暗语的权值吗?
Input
输入数据第一行是一个正整数T(T<=1000),表示有T测试数据。
接下来T行,每行一句度度熊的暗语,即仅由大小写英文字母构成的字符串,字符串的长度最多为10000.
Output
对于每组数据,请输出一个数字,代表度度熊暗语对应的权值;
每组输出占一行。
以下是本人写的代码,如有错误尽请指正。
/*
* stream.cpp
*
* Created on: 2015年4月16日
* Author: CXH
*/
#include <iostream>
#include <vector>
#define testmaxnum 1000//输入的字符个数不超过
#define stringmaxnum 10000//输入的单个字符长度不超过
using namespace std;
int main()
{
int testnum;
cin>>testnum;//从键盘输入T测试数据
if(testnum>1000)
{
cout<<"输入的字符个数不超过"<<testmaxnum<<endl;
return 0;
}
vector<string> svec;
while(testnum--)
{
string str;
cin>>str;//从键盘输入单个字符串
if(str.length()>10000)
{
cout<<"输入的单个字符长度不超过"<<stringmaxnum<<endl;
return 0;
}
svec.push_back(str);
}
string str2;
int qtemp=0,dtemp=0;//qtemp代表前一个字母所代表的值,dtemp代表当前字母所代表的值'a'=1,'b'=2...
int cfk=0;//连续重复小写字母的数量
int zm=1;//大写字母时为2,小写字母时为1
int qzv=0;//权值vlaue
for (vector<string>::iterator vecstart=svec.begin(); vecstart!=svec.end(); vecstart++) {
str2=*vecstart;
for (string::size_type i = 0;i < str2.length();i++) {
if(str2[i]>='A'&&str2[i]<='Z')//当字母为大写时
{
dtemp=str2[i]-'a'+1+32;
zm=2;
}else if(str2[i]>='a'&&str2[i]<='z')//当字母为小写时
{
dtemp=str2[i]-'a'+1;
zm=1;
}else {
cout<<"容器中输入数据错误!输入仅由大小写英文字母构成的字符串!"<<endl;
return 0;
}
if(qtemp==dtemp)//当当前字母与前一字母重复时
{
cfk=cfk+zm;
}else {//当当前字母与前一字母不重复时
qzv=qzv+cfk*cfk*qtemp;
cfk=zm;
qtemp=dtemp;
}
if(i==str2.length()-1)//当遍历到最后一个字母时
{
qzv=qzv+cfk*cfk*dtemp;
}
}
cout<<qzv<<endl;
/*
* 输出一串暗语后初始化各值
*/
qtemp=0;
dtemp=0;
cfk=0;
zm=1;
qzv=0;
}
return 1;
}