https://codeforces.com/contest/1060/problem/D
题意:你可以用1个及以上的圆桌,给n个人排座位,每个人左边需要有Li个空凳子,右边需要有Ri个空凳子,问你最少用多少个凳子
题解:一定要注意可以用多个圆桌,这样其实就是每个人的左边和右边无所谓,只需要求出左边或者右边的最大值即可,然后再加上本人的一个座位。
代码如下:
#include <map> #include <set> #include <cmath> #include <ctime> #include <stack> #include <queue> #include <cstdio> #include <cctype> #include <bitset> #include <string> #include <vector> #include <cstring> #include <iostream> #include <algorithm> #include <functional> #define PI acos(-1) #define eps 1e-8 #define fuck(x) cout<<#x<<" = "<<x<<endl; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w+",stdout); //#pragma comment(linker, "/STACK:102400000,102400000") using namespace std; typedef long long LL; typedef pair<int, int> PII; const int maxn = 1e5+5; const int INF = 0x3f3f3f3f; const int MOD = 1e9+7; LL gcd(LL a,LL b){return b?gcd(b,a%b):a;} LL lcm(LL a,LL b){return a/gcd(a,b)*b;} LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;} double dpow(double a,LL b){double ans=1.0;while(b){if(b%2)ans=ans*a;a=a*a;b/=2;}return ans;} int l[maxn]; int r[maxn]; int main(){ #ifndef ONLINE_JUDGE FIN #endif int n; LL ans=0; cin>>n; for(int i=0;i<n;i++){ cin>>l[i]>>r[i]; } sort(l,l+n); sort(r,r+n); for(int i=0;i<n;i++){ ans+=(LL)max(l[i],r[i])+1; } cout<<ans<<endl; }