文系ギャルが0から始める競技プログラミング#15
Intro
この記事は不定期連載です。
↓最初の一本はこちら↓
文系ギャルが0から始める競技プログラミング#0
↓直前の記事はこちら↓
文系ギャルが0から始める競技プログラミング#14
・髪色
情報系の友達と競プロの話になったときに、
ノリで「髪をレーティングの色に染めればw」となりマジでやることしました。
茶色、緑はいいとして、水色に耐えきれるのか自分。
まあいいや、がんばろ!!!!!!!!!!!
・ABC069B ― 続 文字列を練習する回
引き続きけんちょんさんの記事から、文字列に関する問題を解いていきます。
問題文
internationalization という英単語は、i18n と略されることがあります。
これは、先頭文字iと末尾文字nの間に18文字が挟まっていることに由来します。
長さ3以上の英小文字のみからなる文字列sが与えられます。
同様の規則によってsを略してください。
制約
3≤s≤100
(ただし、sはsの長さを表す。)
sは英小文字のみからなる。
入力
入力は以下の形式で標準入力から与えられる。
s
出力
sを略したものを出力せよ。
B - i18n
国際化って意味らしいです!なげーな!
これは割と瞬殺できたような気がします!
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(){
string s;
cin >> s;
size_t size = s.size();
cout << s[0] << size-2 << s[size-1] << endl;
return 0;
}
sizeで文字数をカウントできることをうまく使って、
調節すればいいだけでしたね…また天才出ちゃいましたか…。
優勝!はいつぎ!
・ABC082B
問題文
英小文字のみからなる文字列s,tが与えられます。
あなたは、sの文字を好きな順に並べ替え、文字列s′を作ります。
また、tの文字を好きな順に並べ替え、文字列t′を作ります。
このとき、辞書順でs′<t′となるようにできるか判定してください。
注釈
長さNの文字列a=a1a2...aNおよび長さMの文字列b=b1b2...bMについて、辞書順でa<bであるとは、次の2つの条件のいずれかが成り立つことをいう;
N<Mかつa1=b1,a2=b2,...,aN=bNである。
あるi(1≤i≤N,M)が存在して、a1=b1,a2=b2,...,ai−1=bi−1かつai<biである。
ただし、文字どうしはアルファベット順で比較される。
例えば、xy<xyaであり、atcoder<atlasである。
制約s,tの長さは1以上100以下である。
s,tは英小文字のみからなる。
制約
s,tの長さは1以上100以下である。
s,tは英小文字のみからなる。
入力入力は以下の形式で標準入力から与えられる。
s
t
出力
辞書順でs′<t′となるようにできるならばYesを、できないならばNoを出力せよ。
B - Two Anagrams
sとtを並べ替えたらいいのかな??
stringでソートすると辞書順に並ぶってどこかで見たような!
と、
sort(s.begin(),s.end());
sort(t.begin(),t.end());
と並べ替えて、分岐させて判定するように書いたら普通にWAでした。
なんでだろ、なんでだろ。
…問題文をよーーーく読んだら、tは大きい順に並べ替えないとダメでした。
tのほうが大きくしたいのだから、tは大きい順、sは小さい順に並べ替えたほうが条件を満たしやすい?って解釈であってる?
ということで、greater<int>()を入れて、大きい順に並べます。
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(){
string s,t;
cin >> s >> t;
sort(s.begin(),s.end());
sort(t.begin(),t.end(), greater<int>());
if(s<t){
cout << "Yes" << endl;
}else{
cout << "No" << endl;
}
return 0;
}
はい優勝ーーーーーー!
間違いに気づくのも天才の証ーーー!
だいぶ文字列の扱いに慣れてきた気がします。
けんちょんさん、ありがとう!
Outro
#16に続く!(不定期連載です。)
これは成功と挫折を繰り返し、
タピオカ片手に難問を解く、
ギャルプログラマが生まれるまでの物語である…。
この記事が気に入ったらサポートをしてみませんか?