JZOJ6400 【NOIP2019模拟11.01】Game

Game

题目描述:
小 A 和小 B 在玩一个游戏,他们两个人每人有 𝑛 张牌,每张牌有一个点数,并且在接下来的 𝑛 个回合中每回合他们两人会分别打出手中的一张牌,点数严格更高的一方得一分,然而现在小 A 通过某种神秘的方法得到了小 B 的出牌顺序,现在他希望规划自己的出牌顺序使得自己在得分尽可能高的前提下出牌的字典序尽可能大。

输入:
第一行一个正整数 𝑛 表示游戏进行的轮数。
接下来一行 𝑛 个整数,第 𝑖 个数表示第 𝑖 轮小 B 将要打出的牌的点数。
接下来一行 𝑛 个整数,表示小 A 拥有的牌的点数。

输出:
输出一行 𝑛 个整数,表示小 A 出牌的顺序。

这道题也是看起来挺简单的。
但是就当我什么话也没说。

考场的时候推了一个错误的贪心,大概就是先从小到大选,然后贪心地更改选中的数的值。然后这贪心是不是很傻啊?刚想出来三秒钟就想到反例了。
然后想了60pts的暴力,就去写后面两题了。

这道题事实上就是贪心。
首先我们可以求出来最大得分。

然后我们按位进行贪心。由于选的数具有二分性,所以可以用二分来判断。

其实这样的方法考场也不是没想过,但是这个最大值如何维护我就不会了。

所以看了 T J TJ TJ以后恍然大悟可以用线段树。

然后那些乱七八糟找前驱后继的就懒得写 S p l a y Splay Splay直接用 S e t Set Set
(好像说的我会写 S p l a y Splay Splay一样

#include <set>
#include <cstdio>
#include <cstring>
using namespace std;

const int N = 100010;

inline void read(int &x)
{
   
    char ch = getchar(); x = 0;
    for(;ch < '0' || ch > '9';) ch = getchar();
    for(;ch >= 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值