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

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

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

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

Q&A

解決済

1回答

1113閲覧

c++のpairについて

cunwe

総合スコア65

C++

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

0グッド

0クリップ

投稿2020/05/13 09:13

https://atcoder.jp/contests/abc091/tasks/arc092_a
こちらの問題の下記の解答コードについて質問させていただきます。二部マッチング?と呼ばれるものでも解けるらしいのですが普通に貪欲法で解ける問題と紹介されていたので取り組んでみました。

#include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define all(v) v.begin(), v.end() #define ll int64_t #define _GLIBCXX_DEBUG int main() { int n; cin >> n; vector<pair<int,int>> a(n); vector<pair<int,int>> b(n); rep(i,n) cin >> a[i].second >> a[i].first;//1 sort(a.rbegin(),a.rend());//2 rep(i,n) cin >> b[i].first >> b[i].second;//1 sort(b.begin(),b.end()); int c=0; rep(i,n){ rep(j,n){ if((b[i].first>a[j].second)&&(b[i].second>a[j].first)){ a[j]=make_pair(300,300); c++; break; } } } cout << c << endl; }

####質問
1.aの入力に関してはcin >> a[i].second >> a[i].first;となっていますがbに関しては順番が逆になっていますがこれはどのような意図があるのでしょうか?
2.ここでのsortはa[i].firstに関してですか?それともa[i].secondに関してですか?それともどちらも独立にsortしてるのでしょうか?
以上になります。よろしくお願い致します。

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

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

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

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

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

fana

2020/05/13 09:39

何か延々とどこぞの問題のコードについて質問しているみたいですが, 他人のコードを読めるだけの基礎的な力量を見に付けることを先に行った方が良いように思えます. あるいは訊く前に自分で調べることを行うべき.本件なら質問2の「std::sortが何やってるの?」なんてのはさっさとググれば解決する事柄. その過程でstd::pairのoprator<について調べることになるだろうから質問1も自然解決する.
cunwe

2020/05/13 13:19

すいません、申し上げておりませんでしたが一応自分でも事前に2,30分ほどググりましたがわからなかったので質問させていただきました。「c++ pair sort」「c++ pair 入力」「pair sort secondだけ」などで調べてみたりリファレンスみたりしたのですがわからなかったです。申し訳ありません。
guest

回答1

0

ベストアンサー

  1. aをy座標が大きい順に並べたいためです。

sort(a.begin(), a.end())は、aの要素を昇順に並べます。
sort(a.rbegin(), a.rend())は、aの要素を降順に並べます。
今回の場合、aの要素は(y座標,x座標)なので、y座標の降順に並びます。

  1. a[i].second の降順、そして、a[i].secondが同じ値であるもの中で、a[i].first がさらに降順に並んだ状態にします。

(2,1),(1,2),(1,1)は結果として有りえますが、
(2,1),(1,1),(1,2)にはなりません。

投稿2020/05/13 09:38

minaminao

総合スコア249

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

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

cunwe

2020/05/13 13:21

例があるおかげで僕でも理解できました。分かりやすく説明していただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問