1. 程式人生 > >Codeforces Round #513 D - Social Circles(貪心)

Codeforces Round #513 D - Social Circles(貪心)

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(貪心)