nama40024
@nama40024

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Atcoder Begginer Contest 352のB問題について

解決したいこと

Atcoder Begginer Contest 352のB問題について、エラーが出て正解となりません。どなたか知恵をお貸しください。
https://atcoder.jp/contests/abc352/tasks/abc352_b
問題については上のリンクを参照ください。

発生している問題・エラー

スクリーンショット (71).png

Main.cpp: In function ‘int main()’:
Main.cpp:20:17: warning: comparison of integer expressions of different signedness: ‘std::__cxx11::basic_string<char>::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
   20 |     if(T.size() == p){
      |        ~~~~~~~~~^~~~

該当するソースコード

#include<iostream>
#include<string>
using namespace std;
int main(){
  string S;
  string T;
  cin >> S >> T;
  int i = 0;
  int p = 0;
  int go = 1;
  while(go){
    if(S[i] == T[p]){//一致したら
      cout << p + 1 ;//そのままpを出力すると-1ずれるので、+1する。
      i = i + 1;//両方一つずらす
      p = p + 1;
    }
    else{
      p = p + 1;//一つずらし、後ろに一致する文字がないか探します
    }
    if(T.size() == p){//もしTの文字列を全て探索したのなら
      go = 0;//ループをぬける
    }
  }
}

自分で試したこと

プログラム上の不備かと思い、
https://atcoder.jp/contests/abc352/tasks/abc352_b
の入力例をいくつか試しました。(次に出てくる例は入力例3のものです。)
しかし、
スクリーンショット (72).png
1,2,3,4,5,6,7番目の文字が正しく入力されている、と趣旨に沿った答えがきちんと出力できています。テストコードでは上手くいくのに、どうしてなのでしょうか。

解決

cout << p + 1 ;
cout << p + 1 << " ";

どうやら出力形式が間違っていました。空白を挿入すれば正しく動きました。

0

1Answer

1,2,3,4,5,6,7番目の文字が正しく入力されている、と趣旨に沿った答えがきちんと出力できています。

問題文をよく読んでください。出力の形式が違いますよ。
(コンパイルエラーの warning は、直接関係ありません)

1Like

Comments

  1. @nama40024

    Questioner

    ありがとうございます。お恥ずかしい限りです。空白を入れて出力したらACとなりました。お手数おかけしました。

  2. 自分なら以下のよう書きます。
    (シンプルなコードを好みます)

    #include <iostream>
    using namespace std;
    int main(void){
      string S, T;
      cin >> S >> T;
      int s = 0;
      for(int t=0; t<T.size(); t++){
        if(S[s] == T[t]){
          cout << t + 1 << ' ';
          s += 1;
        }
      }
      return 0;
    }
    

Your answer might help someone💌