P2652 同花顺
P2652 同花顺
题目背景
所谓同花顺,就是指一些扑克牌,它们花色相同,并且数字连续。
题目描述
现在我手里有 \(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 同花顺的更多相关文章
- 洛谷P2652 同花顺
P2652 同花顺 题目背景 所谓同花顺,就是指一些扑克牌,它们花色相同,并且数字连续. 题目描述 现在我手里有n张扑克牌,但它们可能并不能凑成同花顺.我现在想知道,最少更换其中的多少张牌,我能让这 ...
- 洛谷 P2652 同花顺
P2652 同花顺 题目背景 所谓同花顺,就是指一些扑克牌,它们花色相同,并且数字连续. 题目描述 现在我手里有n张扑克牌,但它们可能并不能凑成同花顺.我现在想知道,最少更换其中的多少张牌,我能让这 ...
- 洛谷 P2652 同花顺(离散化)
洛谷 P2652 同花顺(题面) 手动模拟了一下,其实离散化排序可以起很大作用题目要求花色相同,数字连续,那么我们要做的就是找一种花色,并提取出其中一串数字留下那些舍弃的牌换成相应花色,并和之前留下的 ...
- python简单爬虫定时推送同花顺直播及荐股至邮箱
1.初衷:实践 2.技术:python requests Template 3.思路:根据直播页面获取评价最高的前十博主,定时爬行最新的消息和实战股票 4.思路:python 编辑简单邮件html模板 ...
- 同花顺核新下单程序的"界面不操作超时时间"的设定
"界面不操作超时时间"的设定 同花顺核新下单程序的'界面不操作超时时间'的设定 系统> 系统设置> 界面设置> 界面不操作超时时间(分): 在这个输入框里填上个3 ...
- 同事问如何判断同花顺,我用javascript的二维数组写了个简易demo
有个前同事在群里问如何判断是否为同花顺我用javascript的二维数组写了个简易demo. <!DOCTYPE html> <html> <body> <s ...
- MACD底背离选股公式——通达信、同花顺
{底背离,通达信版.同花顺版} DIFF:=EMA(CLOSE,) - EMA(CLOSE,); DEA:=EMA(DIFF,); MACD:=*(DIFF-DEA); QZQ:=BARSLAST(R ...
- choice接口、同花顺使用
一 choice接口使用 1.choice软件-->量化-->下载中心,下载python接口文件 EMQuantAPI_Python 2.要先绑定手机号,绑定后账户权限不够,暂时放弃. 二 ...
- Java爬取同花顺股票数据(附源码)
最近有小伙伴问我能不能抓取同花顺的数据,最近股票行情还不错,想把数据抓下来自己分析分析.我大A股,大家都知道的,一个概念火了,相应的股票就都大涨. 如果能及时获取股票涨跌信息,那就能在刚开始火起来的时 ...
随机推荐
- 善用Bash history 命令
大家好,我是良许 相信大家平时都有用 history 命令来查看命令历史记录,但是实际上 history 命令并非只有这个功能,history 还有很多有用的功能.尤其是 Bash 版本的 histo ...
- 深入Spring Security-获取认证机制核心原理讲解
文/朱季谦 本文基于Springboot+Vue+Spring Security框架而写的原创笔记,demo代码参考<Spring Boot+Spring Cloud+Vue+Element项目 ...
- C# 转化成 json ,特殊字符的处理
//1.定义string jsonText0= "{\"beijing\":{\"zkkke\":\"2222\",\" ...
- ASP.NET Core 进程内与进程外的性能对比
ASP.NET Core 进程内与进程外的性能对比 本文内容是<深入去浅出ASP.NET Core>提供的扩展内容,毕竟在书里说进程内外的性能说明对比,对于初学者而言,稍微复杂了点. 我在 ...
- java-介绍函数理解重载
package day02; public class FunctionOverload { public static void main(String[] args){ int a = add(, ...
- Sunday算法解决字符串匹配问题
概述 提起字符串匹配可能更多人会想到KMP算法,该算法时间复杂度为O(m+n),而且也是我们在学习数据结构过程中最早接触到的比较好的算法.但KMP算法需要在模式字符串有关联的情况下,也即模式字符串前后 ...
- 手把手带你体验鸿蒙 harmonyOS
wNlRGd.png 前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 GIthub 博客 学习导图 image.png 一.为什么要尝鲜 harmonyos? wNlfx ...
- 整理的网上的MySQL优化文章总结
MySQL优化 Linux优化 IO优化 调整Linux默认的IO调度算法. IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调 ...
- [LeetCode]23. 合并K个排序链表(优先队列;分治待做)
题目 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1 ...
- spyder如何切换python虚拟环境?
2020/5/29 在anaconda下创建了很多个python虚拟环境,现在我想使用 spyder 运行python程序, 并且使用其中某一个虚拟环境,方法如下: 首先要知道 Anaconda自带的 ...