é¢ç½ãã£ãï¼
åé¡æ¦è¦
人ããã¦ã人 ã®èå¯åãå®è£ åãéã¯ãããã ã§ããã
ããã ãã 3 人ãé¸ã¶ããã ãã3 äººå ¨å¡ã«ã¤ãã¦ãèå¯åã»å®è£ åã»éã®ãã¡ã®ããããã«ã¤ãã¦ã¯ä» 2 人ãããçã«é«ããã¨ããæ¡ä»¶ãæºãããªããã°ãªããªãã
ãã®æ¡ä»¶ãæºããããã« 3 人ãé¸ã¶æ¹æ³ããã¹ã¦èããã¨ãã®ãèå¯åæå¼·ã®äººã®èå¯åãå®è£ åæå¼·ã®äººã®å®è£ åãéæå¼·ã®äººã®éã®ç·åã®æ大å¤ãæ±ããã
å¶ç´
èãããã¨
æå座å§ãã¦èããããçµå±åº§å§ã¯å¿ è¦ãªãã£ãã
ãã¦ãã¾ãã人 ãèå¯åãå®è£ åãéã®ãã¡ã® 2 種é¡ä»¥ä¸ã§æ大ã§ãããªãã°ã人 ããã¼ã ã«æ¡ç¨ã§ããªããã¨ãããã¨ãèå¯ããããªããªãã°ãæ®ã 2 人ãã©ã®ããã«é¸ãã ã¨ãã¦ããããã 2 人ãã¨ãã«ãèå¯åã»å®è£ åã»éã®ãã¡ã®ããããã§ã¯ 3 人ä¸æå¼·ãã¨ããç¶æ ãæºããããã«ã¯ã§ããªããªãããã ã
ãã£ã¦ããã®å ´åã 人ã®ä¸ãã人 ãé¤å¤ãã 人ã«ã¤ãã¦ã®åé¡ã解ãã°ããã¨ãããã¨ã«ãªãã
ãªãã人 ãé¤å¤ããçµæãæ°ãã«äºº ãèå¯åãå®è£ åãéã®ãã¡ã® 2 種é¡ä»¥ä¸ã§æå¼·ã¨ããç¶æ ã«ãªããã¨ãããããããã®å ´åã¯ããã®äºº ãåé¤ãã......ã¨ãããã¨ãç¹°ãè¿ããå ·ä½çã«ã¯ã次ã®ããã«ããã°ããã
- èå¯åãæå¼·ã®äººï¼è¤æ°äººããããï¼ã 1 人é¸ã¶ï¼ ã¨ããï¼
- ãã ãå®è£ åã¾ãã¯éã«ããã¦ãæå¼·ã§ããã¨ãï¼ ãé¤å¤ãã¦ãä¸ã«æ»ã£ã¦èå¯åãæå¼·ã®äºº ãé¸ã¶ã®ãããç´ã
- å®è£
åãæå¼·ã®äººã 1 人é¸ã¶ï¼ ã¨ããï¼
- ãã ãèå¯åã¾ãã¯éã«ããã¦ãæå¼·ã§ããã¨ãï¼ ãé¤å¤ãã¦ãä¸ã«æ»ã£ã¦å®è£ åãæå¼·ã®äºº ãé¸ã¶ã®ãããç´ã
- éãæå¼·ã®äººã 1 人é¸ã¶ï¼ ã¨ããï¼
- ãã ãèå¯åã¾ãã¯å®è£ åã«ããã¦ãæå¼·ã§ããã¨ãï¼ ãé¤å¤ãã¦ãä¸ã«æ»ã£ã¦éãæå¼·ã®äºº ãé¸ã¶ã®ãããç´ã
ãã®ç¹°ãè¿ãã®æç¶ããç¹°ãè¿ãã¦ãããæå¾ã«æ®ã£ã 3 人 ãåãããªãã°ãããã 3 人ã§çµãå ´åãæé©ã§ããã¨è¨ããããªããååã«ã¤ãã¦æå¼·ãè¤æ°äººãããããªå ´åãæ°ã«ãªãããã®å ´åã§ãã£ã¦ããååã«ã¤ãã¦æå¼·ã®äººã 1 人é¸ã¶ãã¨ããã°ããã
以ä¸ã®æç¶ãã¯ãset
ãªã©ãç¨ã㦠ã®è¨ç®éã§å®è£
ã§ããã
ã³ã¼ã
#include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; vector<long long> A(N), B(N), C(N); for (int i = 0; i < N; i++) cin >> A[i] >> B[i] >> C[i]; set<pair<long long, int>> as, bs, cs; for (int i = 0; i < N; i++) { as.insert(make_pair(A[i], i)); bs.insert(make_pair(B[i], i)); cs.insert(make_pair(C[i], i)); } // 人 ind ãåé¤ããæä½ auto erase = [&](int ind) -> void{ as.erase(make_pair(A[ind], ind)); bs.erase(make_pair(B[ind], ind)); cs.erase(make_pair(C[ind], ind)); }; // A ã®æå¼·ã®äººãæ¡ä»¶ãæºãããã® checkï¼æºãããªããã°åé¤ããï¼ auto acheck = [&]() -> bool { auto [val, ind] = *as.rbegin(); if (B[ind] == bs.rbegin()->first || C[ind] == cs.rbegin()->first) { erase(ind); return false; } return true; }; // B ã®æå¼·ã®äººãæ¡ä»¶ãæºãããã® checkï¼æºãããªããã°åé¤ããï¼ auto bcheck = [&]() -> bool { auto [val, ind] = *bs.rbegin(); if (A[ind] == as.rbegin()->first || C[ind] == cs.rbegin()->first) { erase(ind); return false; } return true; }; // C ã®æå¼·ã®äººãæ¡ä»¶ãæºãããã® checkï¼æºãããªããã°åé¤ããï¼ auto ccheck = [&]() -> bool { auto [val, ind] = *cs.rbegin(); if (A[ind] == as.rbegin()->first || B[ind] == bs.rbegin()->first) { erase(ind); return false; } return true; }; // A, B, C ã®æå¼·ã被ããªãã°åé¤ãããã¨ãç¹°ãè¿ãã¦ãã while (!as.empty() && !bs.empty() && !cs.empty()) { if (acheck() && bcheck() && ccheck()) { cout << as.rbegin()->first + bs.rbegin()->first + cs.rbegin()->first << endl; return 0; } } cout << -1 << endl; }