fzu 2216

标签: 二分
26人阅读 评论(0) 收藏 举报
分类:
 Problem 2216 The Longest Straight

Accept: 497    Submit: 1546
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

ZB is playing a card game where the goal is to make straights. Each card in the deck has a number between 1 and M(including 1 and M). A straight is a sequence of cards with consecutive values. Values do not wrap around, so 1 does not come after M. In addition to regular cards, the deck also contains jokers. Each joker can be used as any valid number (between 1 and M, including 1 and M).

You will be given N integers card[1] .. card[n] referring to the cards in your hand. Jokers are represented by zeros, and other cards are represented by their values. ZB wants to know the number of cards in the longest straight that can be formed using one or more cards from his hand.

 Input

The first line contains an integer T, meaning the number of the cases.

For each test case:

The first line there are two integers N and M in the first line (1 <= N, M <= 100000), and the second line contains N integers card[i] (0 <= card[i] <= M).

 Output

For each test case, output a single integer in a line -- the longest straight ZB can get.

 Sample Input

2
7 11
0 6 5 3 0 10 11
8 1000
100 100 100 101 100 99 97 103

 Sample Output

5
3

 Source

第六届福建省大学生程序设计竞赛-重现赛(感谢承办方华侨大学)

题意 :  给你n 张牌上边写着几个数, 如果这张上边写的数 为 0  的话,就表示这张牌可以转化成其他任意小于等于m 的牌,因此需要你来求出 最长的连续子序列  子序列!  

思路:  我们先定义一个card 数组表示  1 (这张牌出现过) 0  (这张牌没有出现)  

现在我们就不应该再研究 原本的序列  而是考虑一下 你所拥有的卡片的数字组成的 序列。  就比如样例1  我们就因该研究  

3  5  6  10  11  和0  之间的关系。  那么我们可以转化一下  设一个sum 数组(当然是递增的,所以我们就可以 用二分)表示  从第数字1到数字i  其中 缺少的 个数字的个数,也就是 我们需要的0 的个数 (因为0 可以去变成每一个数字 ) 然后我们就可以枚举左端点  然后二分去找到右端点,,二分的  要找的位置  就是我们当前点为左端点 ,根据我们手中现在有的 0 的个数 就可以找到我们可以用0 去填补的最长连续子序列可以到哪个位置。  然后相减就是最大长度。

代码: 

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define N 100005

using namespace std;

int card[N];
int zero;
int n,m;

int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		cin>>n>>m;
		zero=0;
		int x;
		memset(card,0,sizeof(card));
		
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&x);
			if(x==0) zero++;
			card[x]++;
		}
		
		for(int i=1;i<=m;i++){
			if(card[i]){
				card[i]=card[i-1];
			}
			else{
				card[i]=card[i-1]+1;
			}
		}
		
		int ans=1;
		for(int i=1;i<=m;i++)
		{
			int ind=upper_bound(card+1,card+m+1,zero+card[i-1])-(card+1);
			ind++;
			ans=max(ans,ind-i);
		}
		
		printf("%d\n",ans);
		
		//cout<<ans<<endl;
	}
	
	return 0;
}

查看评论

fzu 2216 The Longest Straight

Problem 2216 The Longest Straight Accept: 178    Submit: 536 Time Limit: 1000 mSec    Memory Limit :...
  • qq1059752567
  • qq1059752567
  • 2016-04-24 21:09:53
  • 395

FZU 2216 The Longest Straight 枚举+二分

FZU 2216 The Longest Straight 枚举+二分
  • qq_26071477
  • qq_26071477
  • 2016-08-20 18:29:40
  • 317

FZU 2216 The Longest Straight (二分)

Problem 2216 The Longest Straight Accept: 128    Submit: 369 Time Limit: 1000 mSec    Memory Lim...
  • L_BestCoder
  • L_BestCoder
  • 2016-04-03 17:37:11
  • 329

FZU Problem 2216 The Longest Straight(二分答案+树状数组)——第六届福建省大学生程序设计竞赛-重现赛

FZU Problem 2216 The Longest Straight(二分答案+树状数组)——第六届福建省大学生程序设计竞赛-重现赛...
  • queuelovestack
  • queuelovestack
  • 2016-09-08 16:36:18
  • 416

FZU2216 最长连续子序列

题目大意:给定一个序列,长度为n,所有数据大小不超过m,若为0则代表可以是任意数,问最长的连续子序列是多长,(2,3,4,5,)为连续 思路:设数组g[i]表示前i个自然数中0的个数,初始化g时若i...
  • qq_24477135
  • qq_24477135
  • 2015-12-31 13:12:31
  • 408

The Longest Straight FZU - 2216

The Longest Straight FZU - 2216题意有n张卡片,每个卡片代表了从1到M的一个数字(可能重复), 这n个卡片中还可能有零,可以用来代表任何从1到M的数字,求最长的连续序列是...
  • weixin_38686780
  • weixin_38686780
  • 2017-08-26 17:22:17
  • 62

[BZOJ2216][Poi2011]Lightning Conductor(dp+决策单调性)

题解传送门题解移项p≥aj+|i−j|−−−−−√−aip\ge a_j+\sqrt{|i-j|}-a_i 正着做一遍反着做一遍然后就可以把绝对值啥的去掉了 以正着做为例 p≥aj+i−j−−−...
  • Clove_unique
  • Clove_unique
  • 2017-02-26 11:22:47
  • 465

FZU 2216 The Longest Straight (二分)

FZU 2216 The Longest Straight (二分)
  • Tc_To_Top
  • Tc_To_Top
  • 2016-08-20 19:42:02
  • 346

BZOJ2216 [Poi2011]Lightning Conductor

考虑分j在i前边和后边分别算然后取max 则f[i]=max(a[j]+sqrt(i-j)) 因为根号x函数差分之后单调不增(也就是说是凸函数),所以有决策单调性,注意是根号函数,double类型的,...
  • neither_nor
  • neither_nor
  • 2016-09-01 16:31:19
  • 589

BZOJ 2216: [Poi2011]Lightning Conductor

题意:已知一个长度为n的序列a1,a2,…,an。 对于每个1
  • MatouKariya
  • MatouKariya
  • 2015-05-22 10:59:01
  • 468
    个人资料
    持之以恒
    等级:
    访问量: 8607
    积分: 1252
    排名: 3万+
    最新评论