AOJ 2252 koukyoukoukokukikou

AOJ 2252 koukyoukoukokukikou
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2252

問題概要

キーボードで右手、左手、それぞれ担当のキーが決まっている。
ある文章を打つときに何回手を入れ替えないといけませんか、という問題。

解法

毎回どちらの手であるか記憶して、前の手と異なった数を数えて出力する。

ソース

#include<iostream>
#include<string>

#define REP(i,b,n) for(int i=b;i<(int)n;i++)
#define rep(i,n)   REP(i,0,n)

using namespace std;

int main(){
  const string left = "qwertasdfgzxcvb";
  const string right = "yuiophjklnm";
  string s;
  while(cin >> s){
    if(s == "#")break;
    int now = -1, cnt = 0;
    rep(i, s.length()){
      int tmp;
      if(left.find(s[i]) != string::npos){
        tmp = 0;
      }
      if(right.find(s[i]) != string::npos){
        tmp = 1;
      }
      if(now == -1)now = tmp;
      else if(now != tmp){
        cnt++;
        now = tmp;
      }
    }
    cout << cnt << endl;
  }
  return 0;
}