在这个时刻|

Arthur_Douglas

园龄:1年4个月粉丝:3关注:3

P5963 [BalticOI ?] Card 卡牌游戏【来源请求】


[rt](https://www.luogu.com.cn/problem/P5963)
------------
## part1
### 题意简述
给你 n 张纸牌,每张纸牌有两个面。
n 张纸牌按一定顺序填入框中。填入卡牌时,不一定需要按照卡牌和框的顺序进行填写(即可以进行位置的调换)。求在一定顺序下式子最小的结果。
### 思路
因为格式是按减和加来回变化的,所以要加的数有 n/2 个,减的也有 n/2 个。因为要结果最小,所以尽量使 sumi 较大的 Ai 所以得到贪心策略:取卡牌 sum 值大的一半的 Ai,放在减号框内,sum 值小的一半的 Bi 放在加号框内,此时的结果最小。
### so
定义一个 sumi 来存放 xi+yi 的值。按 sumi 排序。选前 n/2 个放入加号框,后 n/2 放入减号框。
## part2
最后直接上代码。
### code
```
#include<bits/stdc++.h>
#define int long long
int n,ans=0;struct node{int a,b;}c[50000009];
int cmp(node x,node y){if((x.a+x.b)<(y.a+y.b)){return 1;}return 0;}
using namespace std;
signed main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>c[i].a>>c[i].b;
sort(c+1,c+1+n,cmp);
for(int i=1;i<=n/2;i++) ans+=min(c[i].a,c[i].b);
for(int i=n/2+1;i<=n;i++) ans-=max(c[i].a,c[i].b);
cout<<ans;
return 0;
}
```

## End
另附上一则温馨提示 n5105|Ai|,|Bi|107

posted @   Arthur_Douglas  阅读(27)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起