🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

1300閲覧

Atcoder_076 C問題

LiLiPa

総合スコア1

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2021/03/07 08:05

編集2021/03/07 08:12

前提・実現したいこと

Atcoder の ABC076のC問題(https://atcoder.jp/contests/abc076/tasks/abc076_c)についてです。

発生している問題・エラーメッセージ

以下のソースコードでWAしてしまいます。何度も書き換えましたが、どうしても3つのケースのみ通りません。
原因を教えていただけませんか。

追記;Warningの件、ご指摘ありがとうございます。

該当のソースコード

C++

1#include <bits/stdc++.h> 2using namespace std; 3 4 5int main() { 6 string S,T; 7 cin >> S >> T; 8 9 int change_num = -1; 10 11 if (S.size() < T.size()) { 12 cout << "UNRESTORABLE" << endl; 13 return 0; 14 } 15 16 for(long unsigned int i=0; i < S.size()-T.size()+1; i++){ 17 bool flag_one = true; 18 for(long unsigned int k=0; k<T.size(); k++){ 19 if( S.at(i+k) == T.at(k) || S.at(i+k) == '?'){ 20 }else{ 21 flag_one = false; 22 } 23 } 24 25 if(flag_one){ 26 change_num = i; 27 break; 28 } 29 } 30 31 if(change_num == -1){ 32 cout << "UNRESTORABLE" << endl; 33 return 0; 34 } 35 36 for(long unsigned int i=0; i<T.size(); i++){ 37 if(S.at(i+change_num) == '?') S.at(i+change_num) = T.at(i); 38 } 39 for(long unsigned int i=0; i<S.size(); i++){ 40 if(S.at(i) == '?') S.at(i) = 'a'; 41 } 42 43 cout << S << endl; 44 45} 46 47

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2021/03/07 10:04

???so?help sos や ???s?????spossible assoonas の場合どうなるのが正解なんですか。
LiLiPa

2021/03/08 07:34

string.at(i)の記述について、stringの末尾をi=0と考えていました。 先頭からTに合致する文字列を探索してしまうので、 aaasoshelp が正解のはずが、sossoahelp を出力してしまっていました。 ありがとうございました。
guest

回答3

0

ベストアンサー

うまくいかない入力を挙げておきます。

text

1?? 2b

正しい出力はabですが、このコードだとbaとなります。

投稿2021/03/07 11:04

actorbug

総合スコア2429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LiLiPa

2021/03/08 07:36

string.at(i) の末尾をi=0と考えていたことに気づかされました。非常によいヒントをありがとうございました。
guest

0

ここに出ているのはエラーではありません
ワーニングです。

で、それがどういうワーニングなのか、そのメッセージを読んで理解しましょう。
はなしはそれから、です。

投稿2021/03/07 08:08

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Tに合致する位置の検索で見つかるのは、1個だけではありません。複数個見つかる場合があります。
そのときは、条件2の「文字列の中で辞書順最小の文字列である。」を満たす必要があります。

複数個見つかった場合は、辞書順で最小の文字列を出力する必要があると思います。

投稿2021/03/08 04:33

akiruno-oneone

総合スコア815

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問