1. 程式人生 > >Codeforces 1060D Social Circles 思想轉化

Codeforces 1060D Social Circles 思想轉化

文章目錄

題意

n ,

.
l , r
. . ( ) 有n個人,坐成若干個圈.\newline每個人要求左邊有l張空椅子,右邊有r張空椅子.\newline 求至少要多少張椅子.(每人自己需要坐一個椅子)

題解

非常好玩的一個題,當然是被大佬輕鬆秒掉了.
l , r l,r 兩陣列分別排序,輸出 n + i = 1 n max ( l [ i ] , r [ i ] ) n+\sum_{i=1}^{n}\max(l[i],r[i]) .
然後思考為什麼.
某一個 l l 可以和某一個 r r 匹配,匹配的結果是中間小的那個被約掉了,只剩下了大的那個.
那麼顯然最優的匹配就是最小的 l l 和最小的 r r 匹配,以此類推.
請注意是坐若干個圈,每個人當然有和自己匹配的可能.
在我所在的room有橙名大佬被神仙zhangzy hack了.
我一看他的程式碼.噗!沒開long long!
這種錯誤真是我都笑出來了,連橙名大佬都會犯的錯誤大家一定要注意了.

typedef long long ll;
const int yuzu=1e5;
typedef int fuko[yuzu|10];
fuko l,r;
int main(){
  int i,n=read();
  for (i=1;i<=n;++i) l[i]=read(),r[i]=read();
  sort(l+1,l+n+1),sort(r+1,r+n+1);
  ll llx=n;
  for (i=1;i<=n;++i) llx+=max(l[i],r[i]);
  cout<<llx<<endl;
}

謝謝大家.