SRM301 div2 medium

  string getMinProgram(vector  actions) {
    string instr = "";
    map bar;
//まとめて格納.
    char tabC[5] = "N-/|"; char tabR[5] = "SLFR";
    for(int i = 0; i < 4; i++) {
      bar[tabC[i] ] = i;
    }
    string act = "";
    for(int i = 0; i < actions.size(); i++) {
      act += actions[i];
    }

    for(int i = 1; i < act.length(); i++) {
      int diff = (bar[ act[i] ] - bar[ act[i-1] ]+ 4) % 4;
//まとめて文字を格納したときの効果がここで現れる.
      instr += tabR[diff];
    }
    instr = '.' + instr;
    string ans = "";
    cout << instr << endl;
    int cnt = 1;
//後ろから探索していく.S50S99とかにしなきゃいけないので、前から探索すると複雑になってしまう.
    for(int i = instr.length()-1; i >= 1; i--) {
      if(instr[i] == instr[i-1] && cnt < 99) {
	cnt++;
      } else {
	char ch[3];
	sprintf(ch, "%02d", cnt);
	ans = instr[i] + string(ch) + ans;
	cnt = 1;
      }
    }
    if(ans.length() > 100) ans = ans.substr(0, 97) + "...";
    return ans;
  }