質問編集履歴

2 コードの変更

umachi

umachi score 13

2019/01/21 02:18  投稿

【AtCoder】AGC016 A - Shrinking C++での実行時エラーの原因
### 前提・実現したいこと
AtCoder(https://atcoder.jp)のこの問題(https://atcoder.jp/contests/agc016/tasks/agc016_a)にて下記のソースコードを提出したのですが全14テストケース中3つのテストケースで実行時エラー(RE)が置きてしまいました. 考えつく限りで修正を加えてみたのですが, REを消すことができませんでした. どうかお力添えのほどよろしくお願いいたします.
### 発生している問題・エラーメッセージ
```
RE
```
### 該当のソースコード
```C++
#include <bits/stdc++.h>
using namespace std;
#define uint unsigned int
#define llong long long int
#define ullong unsigned long long int
#define rep(i, n) for (int i = 0; i < n; ++i)
const static long long int MOD = 1000000000 + 7;
const static int dy[] = {0, 1, 0, -1};
const static int dx[] = {1, 0, -1, 0};
bool check(string s) {
   rep(i, s.size()) {
       if (i != 0) {
          if (s[i] != s[i - 1]) return false;
       }
    }
   return true;
}
int main(int argc, char *argv[]) {
   cin.tie(0);
   ios::sync_with_stdio(false);
   string s;
   cin >> s;
   string original_s = s;
   if (s.size() == 1) {
       cout << 0 << endl;
       return 0;
   }
   if (check(s)) {
       cout << 0 << endl;
       return 1;
   }
   int n = s.size();
   set<char> T;
   rep(i, n) {
       T.insert(s[i]);
   };
   vector<int> A;
   for (auto itr = T.begin(); itr != T.end(); ++itr) {
       int ans = 0;
       while(1) {
           ++ans;
           if (n - ans == 1) break;  
           string s_new(n - ans, ' ');
           rep(i, n - ans) {
               if (s[i] == *itr || s[i + 1] == *itr) s_new[i] = *itr;
               else s_new[i] = s[i];
           }
           if (check(s_new)) break;
           s = s_new;
       }
       A.push_back(ans);
       s = original_s;
   }
   cout << *min_element(A.begin(), A.end()) << endl;
   return 0;
}
```
### 試したこと
思いつく限りで修正を加えましたがエラーが外れませんでした.
### 補足情報(FW/ツールのバージョンなど)
C++14(gcc5.1.4)
  • C++

    7797 questions

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

1 タイトルの修正

umachi

umachi score 13

2019/01/21 02:18  投稿

C++ 実行時エラーの原因
【AtCoder】AGC016 A - Shrinking C++での実行時エラーの原因
### 前提・実現したいこと
AtCoder(https://atcoder.jp)のこの問題(https://atcoder.jp/contests/agc016/tasks/agc016_a)にて下記のソースコードを提出したのですが全14テストケース中3つのテストケースで実行時エラー(RE)が置きてしまいました. 考えつく限りで修正を加えてみたのですが, REを消すことができませんでした. どうかお力添えのほどよろしくお願いいたします.
### 発生している問題・エラーメッセージ
```
RE
```
### 該当のソースコード
```C++
#include <bits/stdc++.h>
using namespace std;
#define uint unsigned int
#define llong long long int
#define ullong unsigned long long int
#define rep(i, n) for (int i = 0; i < n; ++i)
const static long long int MOD = 1000000000 + 7;
const static int dy[] = {0, 1, 0, -1};
const static int dx[] = {1, 0, -1, 0};
bool check(string s) {
   rep(i, s.size()) {
       if (i != 0) {
          if (s[i] != s[i - 1]) return false;
       }
    }
   return true;
}
int main(int argc, char *argv[]) {
   cin.tie(0);
   ios::sync_with_stdio(false);
   string s;
   cin >> s;
   string original_s = s;
   if (s.size() == 1) {
       cout << 0 << endl;
       return 0;
   }
   if (check(s)) {
       cout << 0 << endl;
       return 1;
   }
   int n = s.size();
   set<char> T;
   rep(i, n) {
       T.insert(s[i]);
   };
   vector<int> A;
   for (auto itr = T.begin(); itr != T.end(); ++itr) {
       int ans = 0;
       while(1) {
           ++ans;
           if (n - ans == 1) break;
           string s_new(n - ans, ' ');
           rep(i, n - ans) {
               if (s[i] == *itr || s[i + 1] == *itr) s_new[i] = *itr;
               else s_new[i] = s[i];
           }
           if (check(s_new)) break;
           s = s_new;
       }
       A.push_back(ans);
       s = original_s;
   }
   cout << *min_element(A.begin(), A.end()) << endl;
   return 0;
}
```
### 試したこと
思いつく限りで修正を加えましたがエラーが外れませんでした.
### 補足情報(FW/ツールのバージョンなど)
C++14(gcc5.1.4)
  • C++

    7797 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る