前提・実現したいこと
Atcoder ABC049C - 白昼夢 を解きたいです。
自分と同じアルゴリズムで解いている他者のacコードと照らし合わせながら確認しても自分のソースコードがWAの原因がわかりません。
どこが原因でWAになっているのか教えていただきたいです。
#自分のwaソースコード
c++
1#include<iostream> 2#include<string> 3#include<stdio.h> 4 5using namespace std; 6int main() { 7 int st = 0; 8 int flag = 0; 9 10 string s; 11 cin >> s; 12 while (1) { 13 if (s.size() == st) { 14 flag = 1; break; 15 } 16 else if ((s.size() - st) < 5) { 17 break; 18 } 19 else if (s.substr(st, 5) == "dream") { 20 //dreamer と判定 21 if (((s.substr((st + 5), 2) == "er") && (s.substr((st + 5), 5)) != "erase")) { 22 st += 7; 23 } 24 //dream と判定 25 else if((s.substr((st+5),2)!="er")||(s.substr((st+5),5)=="erase") ){ 26 st += 5; 27 } 28 } 29 else if (s.substr(st, 5) == "erase") { 30 //eraser と判定 31 if (s.substr((st + 5), 1) == "r") { 32 st += 6; 33 } 34 //erase と判定 35 else if(s.substr(st+5,1)!="r") { 36 st += 5; 37 } 38 } 39 else { 40 break; 41 } 42 } 43 44 if (flag == 1) { 45 cout << "yes" << endl; 46 } 47 else { 48 cout << "no" << endl; 49 } 50 return 0; 51}
#ほかの方のACソースコード
#include <stdio.h> #include <string> using namespace std; int main(void){ string s; cin >> s; int start_point = 0, flag = 1; // cout << s.length() << endl; // cout << s.substr(start_point, 5) << endl; while(1) { if(s.length() == start_point){break;} else if(s.length() - start_point < 5){ flag = 0; break; } //dreamがつく場合 else if(s.substr(start_point, 5) == "dream"){ //dream単体だと判定 if(s.substr(start_point+5, 2) != "er" || s.substr(start_point+5, 5) == "erase" ){ start_point += 5; } //dreamer単体だと判定 else if(s.substr(start_point+5, 2) == "er" && s.substr(start_point+5, 5) != "erase"){ start_point += 7; } } //eraseがつく場合 else if(s.substr(start_point, 5) == "erase"){ //erase単体だと判定 if(s.substr(start_point+5, 1) != "r"){ start_point += 5; } //eraser単体だと判定 else if(s.substr(start_point+5, 1) == "r"){ start_point += 6; } } else{ flag = 0; break; } } if(flag == 1){cout << "YES" << endl;} else{cout << "NO" << endl;} }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/20 08:11