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

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

新規登録して質問してみよう
ただいま回答率
85.35%
コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

C++

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

Q&A

解決済

2回答

589閲覧

AtCoder ABC094-D WAが消えない

ebhri

総合スコア2

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

C++

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

0グッド

0クリップ

投稿2020/08/02 07:16

問題はこちらです> 引用テキスト

上記URLの問題に対して以下のようなコードを提出しました。

C++

1#include <bits/stdc++.h> 2#include <math.h> 3#define ALL(a) a.begin(), a.end() 4#define rep(i, K, N) for(long long int i = K; i < N; i++) 5#define ll long long int 6using namespace std; 7 8int main(){ 9ll N;cin >> N; 10vector<ll> V(N); 11vector<double> A; 12 13rep(i, 0, N)cin >> V[i]; 14 15sort(ALL(V)); 16 17double M = V[N - 1]; 18 19for(auto v : V ){ 20 21 A.push_back(abs(M/2 - v)); 22 23} 24 25auto Iter = min_element(ALL(A)) - A.begin(); 26 27cout << M << " " << V[Iter]; 28 29}

するとサンプル(URL先にある入力例)に対してのみ正解を出力しておりほかは軒並み不正解でした。なにかヒントとなる助言をいただけると幸いです。

試したこと

配列Vの最大値Mを2で割る際Mがlong longのままでは計算に狂いが生じると考え変数Mの型をdoubleに変え、それに応じて配列Aの要素もdoubleに変えましたが結果は同じでした。

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

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

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

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

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

guest

回答2

0

ベストアンサー

A.push_back(abs(M/2 - v));

この値は比較用途にしか使われておらず、値として使っていないので、2倍してしまっても良さそうです。
つまり、

A.push_back(abs(M - v*2));

これで小数点の値が現れないので、Aをvector<double>にする必要はなくなり、vector<long long>が使えます。

ACも出来るはずです。

投稿2020/08/02 15:53

maai

総合スコア463

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

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

ebhri

2020/08/03 04:34

なるほど、そういう方法もあるのですね。たしかに値そのものではなく比較のみに使うのならすべての値を2倍しても大小関係は変わらず問題ありませんね。勉強になりました。ありがとうございます。
guest

0

全部同じ原因かはわかりませんが、Mが大きくなると指数表記になるので数値としてはあっててもWA扱いになってるのかもしれません。

投稿2020/08/02 08:37

yudedako67

総合スコア2047

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

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

ebhri

2020/08/03 04:32

おっしゃる通りでした。Mが大きい数になるように試してみるとダメでした。回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問