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

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

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

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Q&A

解決済

1回答

1072閲覧

ソートしたやつがうまく出力されないです。。

cunwe

総合スコア65

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

0グッド

0クリップ

投稿2020/04/15 09:45

AtCoderの日立製作所社会システム事業部プログラミングコンテスト2020のB問題について質問がございます。
#問題文
あなたは、冷蔵庫と電子レンジを買うために、とある家電量販店に来ました。

この家電量販店では、
A種類の冷蔵庫とB種類の電子レンジが販売されています。
i番目( 1≤i≤A)の冷蔵庫の値段は
ai円であり、 j番目(1≤j≤B)の電子レンジの値段は bj円です。

また、あなたは M種類の割引券を所持しており、
i番目(1≤i≤M)の割引券では、 xi番目の冷蔵庫 と yi番目の電子レンジを同時に買うと、 支払総額が
ci円安くなります。ただし、複数の割引券を同時に使うことはできません。
さて、あなたは冷蔵庫と電子レンジをちょうど1台ずつ買おうと思っています。かかる金額の最小値を求めてください。

#制約
入力は全て整数
・1≤A≤10^5
・1≤B≤10^5
・1≤M≤10^5
・1≤ai,bi,ci≤10^5
・1≤xi≤A
・1≤yi≤B
・ci≤axi+byi
となっていまして自分は以下のようにコードを書きました。

#include <iostream> #include <vector> #include <algorithm> #include <sort> using std::cin; using std::cout; using std::endl; using std::vector; int main(){ int A,B,M; cin >> A >> B >> M; vector<int> a(A); vector<int> b(B); vector<int> c(M); for (int i=0;i<A;++i) cin >> a[i]; for (int j=0;j<B;++j) cin >> b[j]; for (int i=0;i<M;++i) cin >> c[i]; sort(a.begin(),a.end()); sort(b.begin(),b.end()); int ans; for (int i=0;i<M;++i){ ans=min(a[i]+b[i]-c[i],a[0]+b[0]); } cout << ans << endl; }

これで提出したところWAとなってしまいました。aとbをソートしたので最安値の電子レンジと冷蔵庫を買うときor i番目で割引券を使ったときで小さい方を出力しようとしたのですがうまく行きませんでした。原因がわかる方いらっしゃいましたら教えていただけると嬉しいです。よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こちらの問題ですね。

B - Nice Shopping - AtCoder 日立製作所 社会システム事業部 プログラミングコンテスト2020

原因として少なくとも2つあります。

  • 割引券のデータはxi yi ciと1行に3つの整数が入ったものがM個連なるものなので、

for (int i=0;i<M;++i) cin >> c[i]; のループでは正しくその組み合わせが取り出せません。

  • 割引券の組み合わせxi, yi, ciは xi番目の冷蔵庫(a) と yi番目の電子レンジ(b)を同時に買うと支払総額がci円安くなるものなので、abをソートしてしまったらそのオリジナルの並びが壊され、i番目という指定が無効になってしまいます。

※上記2つを考慮して作ったコードで3つのサンプルテストケースはパスしましたが、回答に挙げるのは控えておきます。AtCoderでユーザーさんらがACしたコードも参照できますし。

投稿2020/04/15 13:02

dodox86

総合スコア9183

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

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

cunwe

2020/04/16 06:48

dodox86さん、ご回答ありがとうございました。僕がそもそも問題文にそぐわないコードを書いていたのですね、気をつけます。もう一度考えてから他の方の回答を見て理解を深めていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問