PKU 2895 Best SMS to Type

http://poj.org/problem?id=2895
携帯の文字を打つのにどれくらい時間がかかるかを計算するというような問題。

switch caseとか使うもんじゃありませんね。
泥実装。

main(){
  int t;
  cin>>t;
  while(t--){
    int p,w;
    cin>>p>>w;
    cin.ignore();
    string in;
    getline(cin,in);

    int last=0;

    int ans=0;

    rep(i,SZ(in)){
      switch(in[i]){
      case ' ':
        ans+=p;
        last=' ';
        break;
      case 'A':
      case 'B':
      case 'C':
        ans+=(in[i]-'A'+1)*p;
        if(i && last=='A')ans+=w;
        last='A';
        break;
      case 'D':
      case 'E':
      case 'F':
        ans+=(in[i]-'D'+1)*p;
        if(i&& last=='D')ans+=w;
        last='D';
        break;
      case 'G':
      case 'H':
      case 'I':
        ans+=(in[i]-'G'+1)*p;
        if(i&& last=='G')ans+=w;
        last='G';
        break;
      case 'J':
      case 'K':
      case 'L':
        ans+=(in[i]-'J'+1)*p;
        if(i && last=='J')ans+=w;
        last='J';
        break;
      case 'M':
      case 'N':
      case 'O':
        ans+=(in[i]-'M'+1)*p;
        if(i && last=='M')ans+=w;
        last='M';
        break;
      case 'P':
      case 'Q':
      case 'R':
      case 'S':
        ans+=(in[i]-'P'+1)*p;
        if(i && last=='P')ans+=w;
        last='P';
        break;
      case 'T':
      case 'U':
      case 'V':
        ans+=(in[i]-'T'+1)*p;
        if(i && last=='T')ans+=w;
        last='T';
        break;
      case 'W':
      case 'X':
      case 'Y':
      case 'Z':
        ans+=(in[i]-'W'+1)*p;
        if(i && last=='W')ans+=w;
        last='W';
        break;
      }
    }
    cout<<ans<<endl;
  }
}