Official

B - 459 Editorial by mechanicalpenciI


問題文の指示通り、各文字列 \(S_i\) を読み込み、\(1\) 文字目を基準に \(C_i\) を求めて連結すれば良いです。
\(S_i\)\(1\) 文字目と\( C_i\) を対応させる方法としてはいくつか考えられますが、配列または文字列を用いるとやや実装が楽になるでしょう。 やや実装量は多くなりますが、if 文のみを用いても実装することもできます。
どのような方法を用いても基本的に時間計算量は問題ありません。

c++ による実装例1:

#include <bits/stdc++.h>
using namespace std;

int main(void){
	string StoC="22233344455566677778889999";
	int n;
	string s,ans;

	cin>>n;
	for(int i=0;i<n;i++){
		cin>>s;
		ans+=StoC[s[0]-'a'];
	}
	cout<<ans<<endl;
	
	return 0;
}

c++ による実装例2:

#include <bits/stdc++.h>
using namespace std;

int main(void){
	
	string StoC="";
	for(int i=2;i<=9;i++){
		for(int j=0;j<3;j++)StoC+=(char)('0'+i); //3 characters for 2 3 4 5 6   8
		if((i==7)||(i==9))StoC+=(char)('0'+i);   //4 characters for           7   9
	}

	int n;
	string s,ans;

	cin>>n;
	for(int i=0;i<n;i++){
		cin>>s;
		ans+=StoC[s[0]-'a'];
	}
	cout<<ans<<endl;
	
	return 0;
}

Python による実装例:

StoC="22233344455566677778889999"
ans=""

n=int(input())
s=list(input().split())
for i in range(n):
    ans+=StoC[ord(s[i][0]) - ord('a')]

print(ans)

posted:
last update: