Codeforces Round #513 D - Social Circles(貪心)
阿新 • • 發佈:2018-10-04
std typedef ORC using codeforce names nbsp 代碼 code 題目大意:
題目大意:
有n(n≤105)個人排成一圈,第i個人要求自己左邊空出li個座位,右邊空出ri(li,ri≤109)個座位。問最少需要安排多少個座位。
思路:
一開始先假設每個人都占了li+ri+1
個位置。考慮怎樣安排相鄰人的順序,並合並相鄰人的li,ri使得答案最優。
將所有li,ri分別排序,將對應的li,ri
合並一定是最優的(想一想這是為什麽)。
#include <iostream> #include <iomanip> #include <algorithm> #include <map> #include <vector> #include<string> #include <set> #include <cmath> using namespace std; typedef long long ll; const int MAXN = 100100; int N; int l[MAXN], r[MAXN]; int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cin >> N; for (int i = 0; i < N; i++) cin >> l[i] >> r[i]; sort (l, l+ N); sort (r, r + N); ll ans = N; for (int i = 0; i < N; i++) ans += max (l[i], r[i]); cout << ans << "\n"; }
Codeforces Round #513 D - Social Circles(貪心)