公式

C - Go Further 解説 by physics0523


出力するべき単項式の文字部分と係数部分に分けて説明します。 なお、\(l=\) ( \(\alpha\) を文字列として見た時の長さ) とします。

文字部分:

  • \(4 \le l < 7\) であれば、\(1a \le \alpha < 1000a=1b\) なので出力すべき文字は \(a\)
  • \(7 \le l < 10\) であれば、\(1b \le \alpha < 1000b=1c\) なので出力すべき文字は \(b\)
  • \(\dots\)

一般に、出力すべき文字は英小文字の中で辞書順で \(\left \lfloor \frac{l-1}{3} \right \rfloor\) 番目の文字です。( \(\lfloor x \rfloor\)\(x\) の小数点以下切り捨て)

係数部分:

  • \(l\)\(3\) で割って \(1\) 余るなら、出力すべきは \(\alpha\) の先頭 \(1\) 文字
  • \(l\)\(3\) で割って \(2\) 余るなら、出力すべきは \(\alpha\) の先頭 \(2\) 文字
  • \(l\)\(3\) で割り切れるなら、出力すべきは \(\alpha\) の先頭 \(3\) 文字

となります。

実装例(C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  string s;
  cin >> s;
  char c='a'-1+((s.size()-1)/3);
  int pre;
  if(s.size()%3==0){pre=3;}
  else{pre=s.size()%3;}
  for(int i=0;i<pre;i++){
    cout << s[i];
  }
  cout << c << '\n';
  return 0;
}

投稿日時:
最終更新: