• 题意:C和D打牌,每张牌有花色和点数,小D刚开始的分数为\(v\),不管输还是赢,只要小D出了牌(花色必须相同),就能得到那张牌点数的分数,若是赢了(点数不小于D的牌),他可以另外加\(c\)分,输了就要扣\(c\)分,现在D知道了C的出牌情况,问他最多能拿多少分,并输出出牌情况.

  • 题解:首先,假如他两的牌花色不同,那么D一定打不出牌,只能白白\(-=c\),否则我们要尽可能的出多的牌,并且要赢得多,贪心策略是,用D的最大的牌去打掉C最大的牌,如果C同种颜色最小的牌都比D最大的大,那么只能随便打一张骗一点分并且把C的最大的牌消耗掉,实现起来挺复杂的,具体看代码吧.

  • 代码:

    struct misaka{
    int col;
    int val;
    int id;
    bool operator < (const misaka &mikoto) const{
    return val<mikoto.val;
    }
    bool operator > (const misaka &mikoto) const{
    return val>mikoto.val;
    }
    }a[N],b[N]; int n,m,c;
    ll v;
    multiset<misaka> V[N];
    int ans[N]; int main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>n>>m>>c>>v;
    for(int i=1;i<=n;++i){
    cin>>a[i].col>>a[i].val;
    a[i].val=-a[i].val; //存负数方便我们后面进行二分查找
    a[i].id=i;
    }
    for(int i=1;i<=m;++i){
    ans[i]=-1;
    cin>>b[i].col>>b[i].val;
    b[i].val=-b[i].val; //存负数方便我们后面进行二分查找
    b[i].id=i;
    }
    sort(a+1,a+1+n);
    for(int i=1;i<=m;++i){
    V[b[i].col].insert(b[i]); //记录小C每种颜色的点数,set会对点数自动排序
    }
    for(int i=1;i<=n;++i){
    if(V[a[i].col].empty()) continue;
    v-=a[i].val;
    auto p=V[a[i].col].lower_bound(a[i]); //因为全是负数,找小C当前颜色牌中小于小D的牌
    if(p==V[a[i].col].end()){ //小D最大的牌打不过小C最小的牌
    v-=c;
    p=V[a[i].col].begin(); //随便出一张
    }
    else v+=c;
    //auto t=*p;
    ans[p->id]=a[i].id; //记录ans
    V[a[i].col].erase(p); //弹出小C的一张牌
    }
    for(int i=1;i<=m;++i){
    if(ans[i]==-1) v-=c;
    }
    cout<<v<<endl;
    for(int i=1;i<=m;++i){
    cout<<ans[i]<<endl;
    } return 0;
    }

洛谷 P6851 onu (贪心,模拟)的更多相关文章

  1. 洛谷 P3049 Landscaping ( 贪心 || DP)

    题意 : 有n块土地,每块有A[i]泥土,现把其改造成B[i]泥土,有3种操作:(1)花费X向任意土地增加1泥土:(2)花费Y向任意土地减少1泥土:(3)花费Z*|i-j|把土地i的1泥土运到土地j. ...

  2. 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)

    洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...

  3. 洛谷 P6851 【onu】贪心

    题目描述 题目传送门 分析 因为小 \(D\) 打出的牌与小 \(C\) 打出的牌花色必须相同,所以我们需要按照花色分类讨论 对于某一种花色 如果小 \(C\) 没有这种花色的牌但是小 \(D\) 有 ...

  4. AC日记——神奇的幻方 洛谷 P2615(大模拟)

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  5. 2018.11.02 洛谷P3952 时间复杂度(模拟)

    传送门 惊叹考场dubuffdubuffdubuff. 这题还没有梭哈难啊233. 直接按照题意模拟就行了. 代码: #include<bits/stdc++.h> using names ...

  6. 【洛谷】【堆+模拟】P2278 操作系统

    from HNOI2003 [题目描述:] 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则 ...

  7. 洛谷 P2689 东南西北【模拟/搜索】

    题目描述 给出起点和终点的坐标及接下来T个时刻的风向(东南西北),每次可以选择顺风偏移1个单位或者停在原地.求到达终点的最少时间. 如果无法偏移至终点,输出“-1”. 输入输出格式 输入格式: 第一行 ...

  8. 洛谷P2831 愤怒的小鸟——贪心?状压DP

    题目:https://www.luogu.org/problemnew/show/P2831 一开始想 n^3 贪心来着: 先按 x 排个序,那么第一个不就一定要打了么? 在枚举后面某一个,和它形成一 ...

  9. 洛谷 P1498 南蛮图腾 —— 模拟

    题目:https://www.luogu.org/problemnew/show/P1498 大约一年前该做的题...现在来填一下坑: 然而不怎么会模拟!还滚去看TJ了: 就是翻倍复制: \ 这个符号 ...

随机推荐

  1. LeetCode202. 快乐数

    题目 编写一个算法来判断一个数 n 是不是快乐数. 快乐数定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1, 也可能是 无限循环 但始终变不到 ...

  2. 【葵花宝典】kolla部署OpenStack-AllinOne

    1.关闭防火墙以及内核安全机制 systemctl stop firewalld systemctl disable firewalld ##永久性关闭 setenforce 0 sed -i 's/ ...

  3. eCATT使用前的配置

    如果想在SAP中使用eCATT,必须做一下相关的配置才行,下面简单介绍这几步:1.SM30,输入表T000,然后点击维护,或者是进入事物SCC4,进入对应的clint属性编辑视图下,将CATT and ...

  4. Entity与Entity之间的相互转化

    一.两个实体类的属性名称对应之间的转化 1.两个实体类 public class Entity1 { private Integer id; private String name; private ...

  5. ECharts特效-折线图上一个光点来回移动

    参考地址:https://www.makeapie.com/editor.html?c=xxxcG6NGk0 效果图打开上面的网址就可以看到. 核心代码如下,该效果实现的难点是数据的封装,还有eval ...

  6. 2021年官网下载各个版本JDK最全版与官网查阅方法

    版本说明 1.安装部署JDK (1)环境 (2)官网下载JDK 由于官网的地址会随着时间的修改而更改修改下载地址,现在讲述下通用的界面操作下载JDK,以后JDK收费更严重,估计就只能下载开源的了. A ...

  7. 计算机网络安全 —— 报文摘要算法 ME5 (三)

    一.报文摘要算法基本概念 使用加密通常可达到报文鉴别的目的,因为伪造的报文解密后一般不能得到可理解的内容.但简单采用这种方法,计算机很难自动识别报文是否被篡改.另外,对于不需要保密而只需要报文鉴别的网 ...

  8. Linux kernel 同步机制

    Linux kernel同步机制(上篇) https://mp.weixin.qq.com/s/mosYi_W-Rp1-HgdtxUqSEgLinux kernel 同步机制(下篇) https:// ...

  9. JVM笔记 -- Java跨平台和JVM跨语言

    学习JVM的重要性 从上层应用程序到底层操作系统,到底有哪些东西? 平时开发的应用程序主要基于各种框架,譬如Spring,SpringMVC,Mybatis,而各种框架又是基于Java API来实现的 ...

  10. 基于Koa2框架的项目搭建及实战开发

    Koa是基于 Node.js 平台的下一代 web 开发框架,由express原班人马打造,致力于成为一个更小.更富有表现力.更健壮的 Web 框架.使用 koa 编写 web 应用,通过组合不同的 ...