P2652 同花顺

Link

题目背景

所谓同花顺,就是指一些扑克牌,它们花色相同,并且数字连续。

题目描述

现在我手里有 \(n\) 张扑克牌,但它们可能并不能凑成同花顺。我现在想知道,最少更换其中的多少张牌,我能让这 \(n\) 张牌都凑成同花顺?

输入格式

第一行一个整数 \(n\) ,表示扑克牌的张数。

接下来 \(n\) 行,每行两个整数 \(a_{i}\) 和 \(b_{i}\) . 其中 \(a_{i}\) 表示第 \(i\) 张牌的花色,\(b_{i}\) 表示第 \(i\) 张牌的数字。

输出格式

一行一个整数,表示最少更换多少张牌可以达到目标。

输入输出样例

输入 #1

5
1 1
1 2
1 3
1 4
1 5

输出 #1

0

输入 #2

5
1 9
1 10
2 11
2 12
2 13

输出 #2

2

说明/提示

  • 对于 30% 的数据,\(n \le 10\);

  • 对于 60% 的数据,\(n \le 10^{5}\),\(1 \le a_{i} \le 10^{5}\),\(1 \le b_{i} \le n\);

  • 对于 100% 的数据,\(n \le 10^{5}\),\(1 \le a_{i}, b_{i} \le 10^{9}\);

前言

这道题好ex,考试考了好几次了都没写出来(怪自己太菜了)。


题解

首先呢,这道题有一个比较特殊的性质,就是重复的牌一定会被我们替换掉,这就以意味着我们需要对牌进行去重。

我们可以转化一下问题,求一下最长的符合同花顺序列的长度,这样就比较好求了。

我们最后的答案就是 原来的牌数减去最长的符合同花顺序列的长度。

假设,我们以这张牌作为当前同花顺序列的最后一张牌,那么前面的那几张牌的数字都是要 大于当前的牌的数字减 \(n\)

所以我们可以对牌按花色排序,如果花色相同按牌的数字排序。

我们开个队列存当前的同花顺序列,如果当前的牌 \(i\) 与之前的牌的花色都不同,就把整个队列清空。

反之,枚举左端点,找到第一个与他花色不同或者数字比他小 \(n\) 的牌 \(j\),同花顺序列的长度就是 \(i-j\)

可以考虑用一个队列来优化一下:

Code

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int N = 1e5+10;
int n,cnt,ans,tot;
queue<int> que;
inline int read()
{
int s = 0,w = 1; char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
while(ch >= '0' && ch <= '9'){s =s * 10+ch - '0'; ch = getchar();}
return s * w;
}
struct node
{
int c,num;
}q[N],a[N];
bool comp(node a,node b)//按花色排序,花色相同按数字排序
{
if(a.c == b.c) return a.num < b.num;
else return a.c < b.c;
}
int main()
{
// freopen("card.in","r",stdin);
// freopen("card.out","w",stdout);
n = read();
for(int i = 1; i <= n; i++)
{
q[i].c = read();
q[i].num = read();
}
sort(q+1,q+n+1,comp);
for(int i = 1; i <= n; i++)//去重
{
if(q[i].c == q[i-1].c && q[i].num == q[i-1].num) continue;
else a[++tot] = q[i];
}
for(int i = 1; i <= tot; i++)
{
if(a[i].c != a[i-1].c)//与之前花色不同,把队列清空
{
while(!que.empty()) que.pop();
}
while(que.size() && a[que.front()].num < a[i].num - n) que.pop();//去掉数字比他小n的点
que.push(i);
ans = max(ans,(int) que.size()); //更新一下最长同花顺序列的长度
}
printf("%d\n",n - ans);
fclose(stdin); fclose(stdout);
return 0;
}

P2652 同花顺的更多相关文章

  1. 洛谷P2652 同花顺

    P2652 同花顺 题目背景 所谓同花顺,就是指一些扑克牌,它们花色相同,并且数字连续. 题目描述 现在我手里有n张扑克牌,但它们可能并不能凑成同花顺.我现在想知道,最少更换其中的多少张牌,我能让这 ...

  2. 洛谷 P2652 同花顺

    P2652 同花顺 题目背景 所谓同花顺,就是指一些扑克牌,它们花色相同,并且数字连续. 题目描述 现在我手里有n张扑克牌,但它们可能并不能凑成同花顺.我现在想知道,最少更换其中的多少张牌,我能让这 ...

  3. 洛谷 P2652 同花顺(离散化)

    洛谷 P2652 同花顺(题面) 手动模拟了一下,其实离散化排序可以起很大作用题目要求花色相同,数字连续,那么我们要做的就是找一种花色,并提取出其中一串数字留下那些舍弃的牌换成相应花色,并和之前留下的 ...

  4. python简单爬虫定时推送同花顺直播及荐股至邮箱

    1.初衷:实践 2.技术:python requests Template 3.思路:根据直播页面获取评价最高的前十博主,定时爬行最新的消息和实战股票 4.思路:python 编辑简单邮件html模板 ...

  5. 同花顺核新下单程序的"界面不操作超时时间"的设定

    "界面不操作超时时间"的设定 同花顺核新下单程序的'界面不操作超时时间'的设定 系统> 系统设置> 界面设置> 界面不操作超时时间(分): 在这个输入框里填上个3 ...

  6. 同事问如何判断同花顺,我用javascript的二维数组写了个简易demo

    有个前同事在群里问如何判断是否为同花顺我用javascript的二维数组写了个简易demo. <!DOCTYPE html> <html> <body> <s ...

  7. MACD底背离选股公式——通达信、同花顺

    {底背离,通达信版.同花顺版} DIFF:=EMA(CLOSE,) - EMA(CLOSE,); DEA:=EMA(DIFF,); MACD:=*(DIFF-DEA); QZQ:=BARSLAST(R ...

  8. choice接口、同花顺使用

    一 choice接口使用 1.choice软件-->量化-->下载中心,下载python接口文件 EMQuantAPI_Python 2.要先绑定手机号,绑定后账户权限不够,暂时放弃. 二 ...

  9. Java爬取同花顺股票数据(附源码)

    最近有小伙伴问我能不能抓取同花顺的数据,最近股票行情还不错,想把数据抓下来自己分析分析.我大A股,大家都知道的,一个概念火了,相应的股票就都大涨. 如果能及时获取股票涨跌信息,那就能在刚开始火起来的时 ...

随机推荐

  1. Photon PUN 三 RPCs & RaiseEvent

    官方文档地址 https://doc.photonengine.com/en-us/pun/current/manuals-and-demos/rpcsandraiseevent 一, RPC   P ...

  2. windows环境下利用Gitblit搭建Git服务器并实现自动部署Web站点目录

    Git服务搭建多见于linux环境,但windows主机也不少,目前网上文章诸多不全,且以讹传讹,不甚清楚.下面介绍windows环境下的自动部署和发布. 所需环境及资源:Java环境.Gitblit ...

  3. 09. jenkins配置不同用户显示不同视图

    jenkins配置不同用户显示不同视图 一.新建用户 1.1 新建用户 Manage Jenkins -> Manage Users -> 新建用户     1.2 我创建了三个用户,分别 ...

  4. 从两表连接看Oracle sql优化器的效果

    select emp.*,dept.* from tb_emp03 emp,tb_dept03 dept where emp.deptno=dept.id -- 不加hint SQL> sele ...

  5. hyperledger fabric 智能合约开发

    开发步奏: 1.创建教育联盟 2.区块链服务平台自动生成通道id 3.区块链网络服务人员通过命令行在区块链网络中创建对应通道 4.创建相关教育组织 5.邀请相关组织加入联盟 6.区块链网络管理人员通过 ...

  6. Openresty使用

    OpenResty是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,常用的第三方模块以及大多数依赖项. 可以把它看成是Nginx附加众多的第三方插件的合集.其主体是嵌入lua脚本的 ...

  7. Python爬取NBA虎扑球员数据

    虎扑是一个认真而有趣的社区,每天有众多JRs在虎扑分享自己对篮球.足球.游戏电竞.运动装备.影视.汽车.数码.情感等一切人和事的见解,热闹.真实.有温度. 受害者地址 https://nba.hupu ...

  8. python之csrf简介

    django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防跨站请求伪造功能有分为全 ...

  9. Vue中vue.config的配置

    vue-cli 3.x 脚手架搭建完成后,项目目录中没有 vue.config.js 文件,需要手动在根目录中创建 vue.config.js. vue.config.js 是一个可选的配置文件,如果 ...

  10. 软件测试----xml文件介绍

    软件测试 目录 软件测试 一.什么是XML?: 二.XML和HTML的差异: 三.XML的特点 1.XML可以自定义标签 2.XML必须包含根元素 如上所示, 3.XML标签对大小写敏感 4.XML ...