BZOJ4391: [Usaco2015 dec]High Card Low Card

2025ICPC南昌邀请赛题解 2025ICPC南昌邀请赛由XDU和WHU联合出题的ICPC南昌邀请赛,榜单显示8题金、6题银、5题铜。 阅读详情

题目大意:给定对方的出牌序列以及你的手牌,双方手牌一共是一个1到2n的全排列,一开始是点大胜出,你可以在任意时刻改一次规则变成点小胜出,求最多能赢多少次


用贪心的思想,肯定一开始尽量用点大的,改规则之后用点小的,每次用卡的时候都用那个恰好能赢的卡是最优的,如果没有就用最小的,然后枚举一下改规则的时间,这样可以O(N^2)算出答案

我们考虑先不枚举改规则的中间点,用F[i]表示前i个回合不改规则最多能赢多少个,这个可以直接扫一遍得出答案,在设G[i]为从i开始改规则后面(包括i)能赢多少个,这个同样扫一遍就能知道答案,那么最终答案就是最大的F[i]+G[i+1]

为什么呢?首先F和G分别都是在没有手牌限制的情况下求出的答案,所以F+G一定不会比答案更差

其次,F和G方案中可能会有重复的手牌,但是可以经过调整变成不重复的手牌且不让答案变得更差(因为前面点大获胜,后面点小获胜),所以F+G一定不会比答案更优

所以F+G的最大值就是答案


(我写的是线段树,但是实际上用set就可以过....)


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 100010
using namespace std;
int zyh[N],sxh[N],a[N];
int mi[N<<2],l[N<<2],r[N<<2],t[N<<2],b[N];
void pup(int x)
{
    mi[x]=min(mi[x<<1],mi[x<<1|1]);
}
void pud(int x)
{
    if(!t[x]) return;
    int i;
    for(i=0;i<2;i++)
    {
        mi[x<<1|i]+=t[x];
        t[x<<1|i]+=t[x];
    }
    t[x]=0;
}
void build(int now,int ll,int rr)
{
    l[now]=ll;r[now]=rr;
    if(ll==rr)
    {
        mi[now]=b[ll];
        return;
    }
    int mid=(ll+rr)>>1;
    build(now<<1,ll,mid);
    build(now<<1|1,mid+1,rr);
    pup(now);
}
int checkmi(int now,int ll,int rr)
{
    if(l[now]==ll&&r[now]==rr) return mi[now];
    pud(now);
    int mid=(l[now]+r[now])>>1;
    if(rr<=mid) return checkmi(now<<1,ll,rr);
    else if(ll>mid) return checkmi(now<<1|1,ll,rr);
    else return min(checkmi(now<<1,ll,mid),checkmi(now<<1|1,mid+1,rr));
}
void change(int now,int ll,int rr,int v)
{
    if(l[now]==ll&&r[now]==rr)
    {
        t[now]+=v;
        mi[now]+=v;
        return;
    }
    pud(now);
    int mid=(l[now]+r[now])>>1;
    if(rr<=mid) change(now<<1,ll,rr,v);
    else if(ll>mid) change(now<<1|1,ll,rr,v);
    else
    {
        change(now<<1,ll,mid,v);
        change(now<<1|1,mid+1,rr,v);
    }
    pup(now);
}
int ff[N],gg[N];
int main()
{
    int n;
    scanf("%d",&n);
    int i,j,x,y;
    for(i=1;i<=n;i++)
    {
        scanf("%d",&zyh[i]);
        a[i]=zyh[i];
    }
    sort(zyh+1,zyh+n+1);
    int now=1,cn=0;
    for(i=1;i<=2*n;i++)
    {
        if(zyh[now]==i) now++;
        else
        {
            cn++;
            sxh[cn]=i;
        }
    }
    now=1;
    b[0]=0;
    for(i=1;i<=n;i++)
    {
        b[i]=b[i-1]-1;
        while(zyh[now]<sxh[i]&&now<=n) now++,b[i]++;
    }
    build(1,1,n);
    int L,R,mid;
    for(i=n;i>=1;i--)
    {
        ff[n-i]=n+checkmi(1,n-i+1,n);
        L=n-i+1;R=n;
        if(a[i]<sxh[n])
        {
            while(L<R)
            {
                mid=(L+R)>>1;
                if(sxh[mid]<a[i]) L=mid+1;
                else R=mid;
            }
            change(1,L,n,-1);
        }
    }
    memset(t,0,sizeof(t));
    for(i=1;i<=n;i++)
    {
        a[i]=2*n+1-a[i];
        zyh[i]=2*n+1-zyh[i];
        sxh[i]=2*n+1-sxh[i];
    }
    for(i=1;i<=n/2;i++)
    {
        swap(zyh[i],zyh[n+1-i]);
        swap(a[i],a[n-i+1]);
        swap(sxh[i],sxh[n+1-i]);
    }
    now=1;
    for(i=1;i<=n;i++)
    {
        b[i]=b[i-1]-1;
        while(zyh[now]<sxh[i]&&now<=n) now++,b[i]++;
    }
    build(1,1,n);
    for(i=n;i>=1;i--)
    {
        gg[i]=n+checkmi(1,n-i+1,n);
        L=n-i+1;R=n;
        if(a[i]<sxh[n])
        {
            while(L<R)
            {
                mid=(L+R)>>1;
                if(sxh[mid]<a[i]) L=mid+1;
                else R=mid;
            }
            change(1,L,n,-1);
        }
    }
    int ans=0;
    for(i=0;i<=n;i++)
    ans=max(ans,ff[i]+gg[i]);
    printf("%d",ans);
}

IC 时钟设计核心问题与高质量系统设计指南(附源码) 本文深入探讨了IC时钟设计的核心问题与高质量系统设计方法。时钟系统作为IC的"心脏",其性能直接影响时序稳定性、功耗效率和可靠性。文章从五个维度展开分析:时钟源选择与性能匹配、时钟分配网络设计、抖动抑制、多时钟域管理和功耗优化。针对高质量时钟系统设计,提出了时钟源优化、时钟树结构优化、干扰抑制与仿真验证等具体方法。同时,系统阐述了时钟与复位的协同设计关系,强调异步复位同步释放等技术的重要性。文章还总结了高质量IC系统设计的综合要点,包括电源/信号完整性、时序功耗平衡、可靠性设计及全流程验 阅读详情

相关推荐

scannet数据集下载文件

scannet数据集下载文件 由于大家会申请scannet数据集,审批比较慢,我将下载的文件里面的内容贴出来,大家可以复制放进py文件中,运行就可以下载 ps:别再私信要数据集了,这个自己下载,如果光三维数据的话,还是很快的,当然如果路由器翻了墙的话,下载会更快。 #!/usr/bin/env python # Downloads ScanNet public data release # Run with ./download-scannet.py (or python download-scannet.

weixin_40766438的博客 9234

bzoj4391: [Usaco2015 dec]High Card Low Card

题面在这里 题意: 有2*n张牌,编号为1~2n,两个人各拿n张。现在A知道B n轮出的牌。 规定前1~i轮编号大的人胜,后i+1~n轮编号小的人胜。 问选择恰当的i,A最多能胜几轮。 做法: 记f[i]表示前i轮中A最多能胜的轮数,g[i]表示后i~n轮中A最多能胜的轮数 答案就是max(f[i]+g[i+1])(0=i=n)max{(f[i]+g[i+1])}(0 现在

juruo? juruo! 353

最优化方法 25:PDHG

前面的章节要么从原始问题出发,要么从对偶问题出发,通过求解近似点或者一个子优化问题进行迭代,而且推导过程中我们发现根据问题的参数特征,比如矩阵 AAA 是瘦高型的还是矮胖型的,采用对偶和原始问题的复杂度会不一样,可以选择一个更简单的。而这一节,我们将要从原始对偶问题出发来优化,什么是原始对偶问题呢?就是原始优化变量和对偶优化变量(原始函数和共轭函数)混合在一块,看下面的原理就知道了。 1. 原始对偶问题 现在考虑原始优化问题,其中 f,gf,gf,g 为闭凸函数 min⁡f(x)+g(Ax) \min \q

Glooow的博客 4604

[bzoj4391]高分低分——贪心

题目大意: 贝西很喜欢玩一种纸牌游戏。 贝西和她的朋友艾尔西正在玩这个简单的纸牌游戏。游戏有2N张牌,牌上的数字是1到2N。把这些牌分成两份,贝西有N张,艾尔西有另外N张。接下来她们进行N轮出牌,每次各出一张牌。一开始,谁出的牌上的数字大,谁就获得这一轮的胜利。贝西有一个特殊权利,她可以在任意一个时刻把原本数字大的获胜的规则改成数字小的获胜,这个改变将会一直持续到游戏结束。特别的,贝西可以从第...

ylsoi的博客 430

RK3588s Camera ISP调优详解(一)ISP调试工具及环境配置(附下载途径)

本文主要介绍了rkisp tuner工具的连接与使用,并附上了工具及依赖库的下载地址

zongheng_raobo的博客 6274

vcpkg管理OpenCASCADE的5个高效技巧:从多版本共存到离线部署

本文详细介绍了使用vcpkg高效管理OpenCASCADE的5个实用技巧,包括多版本共存、性能优化、团队共享、CI/CD集成和离线部署。通过自动配置和版本控制,vcpkg显著简化了OpenCASCADE的开发环境管理,特别适合工业级CAD开发场景。

rain6的博客 189

bzoj4391[Usaco2015 dec]High Card Low Card

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4391 题目大意: 奶牛Bessie和Elsie在玩一种卡牌游戏。一共有2N张卡牌,点数分别为1到2N,每头牛都会分到N张卡牌。 游戏一共分为N轮,因为Bessie太聪明了,她甚至可以预测出每回合Elsie会出什么牌。 每轮游戏里,两头牛分别出一张牌,点数大者获胜。...

277

esp32 python开发环境搭建_eclipse esp32开发环境搭建

安装方法基本是按照官网提供的方法来操作https://github.com/espressif/idf-eclipse-plugin#GettingStarted但是官网的方法安装之后还是不能编译成功的,第一次编译会出现一下问题问题1:Building in: E:\eclipse-workspace\helloworlk\buildcmake -G Ninja -DCMAKE_TOOLCHAIN...

weixin_39978276的博客 1264

bzoj4391 [Usaco2015 dec]High Card Low Card题解

这道题算是见过奶牛题里面最难的。。是我见识太少了 绕了一大圈,问了Q巨才明白这题怎么做 下面是Q巨原话  先考虑前i张牌,并且是大的赢 那么我们就用尽可能小的能赢对面的牌来打 然后扫一遍就可以知道i=0,1,2,3,...,n时最多能赢多少 同理倒着扫一遍小的赢的情况……然后枚举分割线  but……这样做的话可能会出现,一张牌被用了多次的情

lcrtest的博客 1749

避坑指南:Unity新版InputSystem在移动端的5个常见问题及解决方案

本文针对Unity新版InputSystem在移动端开发中的常见问题,提供了5个关键解决方案,包括虚拟摇杆灵敏度调节、多点触控冲突处理、按钮反馈延迟优化、手势识别与陀螺仪数据融合以及Android/iOS平台差异处理。这些实战经验帮助开发者高效解决触控适配难题,提升移动游戏体验。

soda5的博客 405

保姆级教程解决Edge Copilot该服务在你所在的地区不可用及Sign in to continue your chat.——电脑篇

相信很多人更新到Win11之后都注意到自带的浏览器右上角多了一个Copilot,这个副驾驶是微软与OpenAI合作,免费使用,包括插件功能。相当于你可以在电脑上免费的使用GPT4。很可惜,点开提示该服务在你所在的地区不可用。很多人第一时间想到科学的上网应该就可以解决了,尝试后又提示you’ve reached the conversation limit for today.Sign in to continue your chat.明明登录账号了为什么还是不能用?不是免费吗,为什么提示今天受限制。 其实上

weixin_44887342的博客 5万+

bzoj 4391: [Usaco2015 dec]High Card Low Card 线段树

题意 奶牛Bessie和Elsie在玩一种卡牌游戏。一共有2N张卡牌,点数分别为1到2N,每头牛都会分到N张卡牌。 游戏一共分为N轮,因为Bessie太聪明了,她甚至可以预测出每回合Elsie会出什么牌。 每轮游戏里,两头牛分别出一张牌,点数大者获胜。 同时,Bessie有一次机会选择了某个时间点,从那个时候开始,每回合点数少者获胜。 Bessie现在想知道,自己最多能获胜多少轮? 2...

beginend 395

【软件定义汽车】-【架构篇】-全面讲解整车电子电气架构演进

前言: 前段时间,陆陆续续写了一些电子电气架构相关的文章。这里打算再写最后一篇作为收尾,为整个系列画上句号,把坑填上,这个话题就算过去了。后续一段时间,尽量把之前文章中挖的“坑”填一下。行文逻辑将借鉴5W2H进行。 另外,本文作为一篇整合性的文章,为保证逻辑的完整性,主要是将大量过去自己文章中的内容进行梳理整合,也存在很多行业内专家的公开文章的内容,请见谅。 WHAT1:什么是汽车电子电气架构? 电子电气架构:EEA,Electrical/Electronic Architecture.

零点壹客的博客 1万+

BZOJ 4391: [Usaco2015 dec]High Card Low Card

Description Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of opposable thumbs. Unfortunately, none of the other cows in the herd are good opponents. They are s...

ypxrain的博客 403

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

bzoj4391: [Usaco2015 dec]High Card Low Card(贪心 + 思维)

原题链接 题目描述:奶牛Bessie和Elsie在玩一种卡牌游戏。一共有2N张卡牌,点数分别为1到2N,每头牛都会分到N张卡牌。 游戏一共分为N轮,因为Bessie太聪明了,她甚至可以预测出每回合Elsie会出什么牌。 每轮游戏里,两头牛分别出一张牌,点数大者获胜。 同时,Bessie有一次机会选择了某个时间点,从那个时候开始,每回合点数少者获胜。 Bessie现在想知道,自己最多能获胜...

diqiao4431的博客 297

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【dp 贪心】bzoj4391: [Usaco2015 dec]High Card Low Card

巧妙的贪心 Description Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of opposable thumbs. Unfortunately, none of the other cows in the herd are good opponent...

weixin_30387663的博客 173

【bzoj 4391】 High Card Low Card 【Usaco2015 dec】

Description Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of opposable thumbs. Unfortunately, none of the other cows in the herd are good opponents. They are s...

TLECODE的博客 359

bzoj4391 [Usaco2015 dec]High Card Low Card

传送门 分析 神奇的贪心,令f[i]表示前i个每次都出比对方稍微大一点的牌最多能赢几次 g[i]表示从i-n中每次出比对方稍微小一点的牌最多赢几次 ans=max(f[i]+g[i+1]) 0<=i<=n 虽然方案可能会重合但是这是可行的 1:因为限制比原题目宽,所以ans>=真实的答案 2:对于重复取的数a,如果集合中有个没取的数<a,那么在用小的赢的时候可...

weixin_34281537的博客 122

【BZOJ4391】[Usaco2015 dec]High Card Low Card(贪心)

【BZOJ4391】[Usaco2015 dec]High Card Low Card(贪心) 题面 BZOJ 题解 预处理前缀后缀的结果,中间找个地方合并就好了。 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath>...

weixin_30367873的博客 114

BZOJ 4391/Luogu3129[Usaco2015 dec]High Card Low Card

强大の贪心.....orz

cgh_Andy's Blog 796

【刷题】BZOJ 4391 [Usaco2015 dec]High Card Low Card

Description Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of opposable thumbs. Unfortunately, none of the other cows in the herd are good opponents. They are so...

weixin_30512089的博客 170

[bzoj4391] [Usaco2015 dec]High Card Low Card 贪心 线段树

~~~题面~~~ 题解:   观察到以决策点为分界线,以点数大的赢为比较方式的游戏都是它的前缀,反之以点数小的赢为比较方式的都是它的后缀,也就是答案是由两段答案拼凑起来的。   如果不考虑判断胜负的条件的变化,则有一个比较容易发现的贪心:   设f[i]为从1开始到i位, 比较方式为点数大的获胜,最多能赢几局。   那么为了使答案尽可能优,每次我们都会在剩余牌中找到点数大于对方的 最小的...

weixin_30737433的博客 131

[BZOJ4391][Usaco2015 dec]High Card Low Card dp+set+贪心

Description Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of opposable thumbs. Unfortunately, none of the other cows in the herd are good opponents. They are...

weixin_30709635的博客 95

【搬自usaco2015Dec】【JZOJ4684】卡牌游戏 题解

usaco原题叫 High Card Low Card 【题目大意】      ~~~~~~有2n张牌,分别是1~2n。WWT有其中的n张牌,你有另n张。       ~~~~~~游戏规则本来是这样的:每一回合,你和WWT同时打出一张牌,谁大谁赢。但是,你可以在任意一个时刻将游戏规则改为“谁小谁赢”,但你只能改一次。       ~~~~~~现在给定WWT的牌和出牌顺序,求你最多赢多少局。

Four's 1551
上一篇: BZOJ1635: [Usaco2007 Jan]Tallest Cow 最高的牛
下一篇: BZOJ4580: [Usaco2016 Open]248
commonc
博客等级 码龄11年 173粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值