题目背景

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

题目描述

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

输入输出格式

输入格式:

第一行一个整数n,表示扑克牌的张数。接下来n行,每行两个整数 ai 和 bi。其中ai表示第 i 张牌的花色,bi表示第 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<=10。

对于60%的数据,n ≤ 10^5,1 ≤ ai ≤ 10^5,1 ≤ bi ≤ n。

对于100%的数据,n ≤ 10^5,1 ≤ ai, bi ≤ 10^9。

思路:

反向思考一下,我们只要求能组成的同花顺的最长长度(组成张数)l,再用n减去l即可。

怎么求l呢?

假设有这样一组样例:

6

1 7

2 8

1 9

1 10

2 2

3 5

首先我们要思考同花顺的性质:花色相同且数字连续。那么由此我们可以想到什么呢?大多数人最先想到的大概是排序吧。没错,的确需要排序,这是做出这道题的一个十分重要的基础。但是同花顺还有一个性质是花色相同,说明这个题排序并不是简单的排序。该怎么排序才能求出“颜色相同”的最长单调递增序列呢?我们可以定义一个排序法则rule(详见代码),如果两张牌颜色相同,则将它们按从小到大的顺序排序;如果颜色不同,则将他们的颜色编号从小到大排序。

排序后我们将得到这样一组数据:

1 7

1 9

1 10

2 2

2 8

3 5 排完序之后我们是不是就可以开开心心求最长序列了呢?机智的出题人显然不会这么轻易放过我们(233),TA埋了一个坑在这里面:可能会存在花色和数值均相同的扑克牌。这样就影响了我们求最大序列长度,所以我们必须要通过条件语句来筛出这些牌。我们再用一个数组b[]来记录筛出重复牌后的数据。跳过这个坑之后我们就可以开始最后的工作啦!如何求最长的序列呢?我们可以通过枚举所有区间,来判断哪个区间长度最大且满足是同色牌&&b[i].y-b[j].y+1<=n(这个判断条件非常的关键)。这个条件是怎么推出的呢?先理解b[i].y-b[j].y+1的意义:它表示区间的长度,也就是说这个区间有几张牌。当它的长度d<=n的时候,一定能够拿出足够的牌来更换这个区间中不满足条件的牌。这样我们就可以求出最大序列长度啦~

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 100001
using namespace std;
int n,cnt,ans;
struct nond{
int col,num;
}v[MAXN],bns[MAXN];
int cmp(nond a,nond b){
if(a.col==b.col) return a.num<b.num;
return a.col<b.col;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&v[i].col,&v[i].num);
sort(v+,v++n,cmp);
for(int i=;i<=n;i++)
if(v[i-].col!=v[i].col||v[i-].num!=v[i].num)
bns[++cnt]=v[i];
for(int i=;i<=cnt;i++){
int tmp=;
for(int j=i;j>=;j--)
if(bns[i].col==bns[j].col&&bns[i].num-bns[j].num+<=n)
tmp++;
else break;
if(tmp>ans) ans=tmp;
}
cout<<n-ans;
}

洛谷 P2652 同花顺的更多相关文章

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

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

  2. 洛谷P2652 同花顺

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

  3. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  4. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  5. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  6. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  7. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  8. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  9. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

随机推荐

  1. [Windows Server]新机子上装老系统·

    硬盘模式改了也得用U大师,然后再PE里装 1.U大师做启动盘 2.拷贝解压后的系统进去 3.用PE自带安装工具

  2. 支付宝接口程序、文档及解读(ASP.NET)

    最近需要为网站加入支付宝的充值接口,而目前关于支付宝接口开发的资料比较杂乱,这里就我此次开发所用到的资料进行汇总整理,希望能够帮助需要的朋友. 开发步骤: 1. 确定签约类型 支付宝的接口有多种类型, ...

  3. crm使用soap批量删除数据

    //批量删除数据 function demo() {     //实体名称     var entityname = "fw_student";     var data = [] ...

  4. Android Touch事件分发过程

    虽然网络上已经有非常多关于这个话题的优秀文章了,但还是写了这篇文章,主要还是为了加强自己的记忆吧,自己过一遍总比看别人的分析要深刻得多.那就走起吧. 简单演示样例 先看一个演示样例 : 布局文件 : ...

  5. js代码从页面移植到文件里失效或js代码改动后不起作用的解决的方法

    近期在做关于站点的项目,总是发生这种问题 写的javascript代码在页面上没有问题,可是将js代码移植到.js的文件里,在页面上进行调用,总是出现失效等错误 另外改动后的js代码,又一次刷新网页仍 ...

  6. [ACM] POJ 2154 Color (Polya计数优化,欧拉函数)

    Color Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7630   Accepted: 2507 Description ...

  7. Quartz2D二维画图引擎

    Quartz2D二维画图引擎 这个二维画图引擎的功能很强大 一般苹果公司xcode 提供给我们的一些UI控件不能满足我们的需求 所以我们会自己定义控件 xcode 提供的全部控件都是由这个画图引擎画出 ...

  8. 关于static的使用

    在我们写类写方法的时候,通常会看到有的时候是静态的方法,有的则是动态的,那么问题来了,什么时候该加static什么时候不加static?这里的区别有多大那?那么加不加static取决与这个方法的特征与 ...

  9. UFLDL教程笔记及练习答案五(自编码线性解码器与处理大型图像**卷积与池化)

    自己主动编码线性解码器 自己主动编码线性解码器主要是考虑到稀疏自己主动编码器最后一层输出假设用sigmoid函数.因为稀疏自己主动编码器学习是的输出等于输入.simoid函数的值域在[0,1]之间,这 ...

  10. 2015.04.27,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 35

    1.how to look 拉丁词根specto,to look的意思,是许多常见英文词语的来源,如spectacle(['spektәkl] n. 值得看的东西, 光景, 眼镜).spectator ...