質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C++

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

Q&A

解決済

2回答

409閲覧

ABC175 C問題

lygumi

総合スコア1

C++

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

0グッド

0クリップ

投稿2020/08/17 02:09

編集2020/08/17 02:17

前提・実現したいこと

ABC175 C問題をbit全探索で回答を作ってみました。

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

制約上TLEになるのは分かるが、WAも複数回出る理由がわからない
コードのどの点にその原因があるのか知りたい

該当のソースコード

C++

1include <bits/stdc++.h> 2using namespace std; 3#define rep(i, n) for(int i = 0; i < (int)(n); i++) 4 5int main(){ 6 int64_t x, k, d, ans = 10000000000000000; cin >> x >> k >> d; 7 int64_t y = x; 8 rep(i, 1 << k){ 9 rep(j, k){ 10 if((i >> j) & 1) y += d; 11 else y -= d; 12 //cout << y << endl; 13 } 14 //cout << y << endl; 15 if(y < 0) y = -y; 16 if(ans > y) ans = y; 17 y = x; 18 } 19 cout << ans << endl; 20 return 0; 21}

試したこと

サンプルコードを入力してテスト

補足情報(FW/ツールのバージョンなど)

入力される値は最大値10の15乗

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

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

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

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

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

guest

回答2

0

入力される値は最大値10の15乗

でしたら、1 << kという値はkビット必要ですので、64ビットしかないint64_tでは全く足りません。

投稿2020/08/17 02:19

maisumakun

総合スコア145184

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

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

lygumi

2020/08/17 13:29

理解できました! ありがとうございます!
guest

0

ベストアンサー

kが64を超えるとき、1 << kが0になり、10000000000000000が出力されて終了する為です。
なので、WAになります。

大抵このような実験をする時は、assertを使って考慮していないケースを排除します。

cin >> x >> k >> d; assert(k < 20); // 20未満でない場合はREにしてもらう

投稿2020/08/17 02:17

maai

総合スコア463

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

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

lygumi

2020/08/17 13:32

理解できました!ありがとうございます! 知識不足で申し訳ないのですが、 REにしてもらうというのはどういうことなのかご教授願います。
maai

2020/08/17 14:33

想定していない入力→RE 想定した入力かつ正答→AC 想定した入力かつ誤答→WA 想定した入力かつ誤答が無い、つまり書いたコードが想定通りなら、ACとREだけになります
lygumi

2020/08/19 00:11

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問