Official
C - Go Further Editorial
by
C - Go Further Editorial
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;
}
posted:
last update:
