[codeforces 1330A] Dreamoon and Ranking Collection 连续递增序列判定

Codeforces Round #631 (Div. 2) - Thanks, Denis aramis Shitov!   比赛人数10889

[codeforces 1330A]  Dreamoon and Ranking Collection   连续递增序列判定

总目录详见https://blog.csdn.net/mrcrack/article/details/103564004

在线测评地址https://codeforces.com/contest/1330/problem/A

ProblemLangVerdictTimeMemory
A - Dreamoon and Ranking Collection GNU C++11Accepted31 ms0 KB

这次比赛的题目都不简单,坑点很多。

读题是个很大的问题,

x代表什么,反复读题,结合样例解释,才能弄明白,

x是指未来的比赛场次,具体对应的比赛名次,可由编程者自定。

目的是让,名次能从1,2,3,......,v-1,v.

x若取得好,就可以让v值取最大。若不明白文字描述,请看如下数据模拟

样例数据,手工模拟如下

6 2
3 1 1 5 7 10

5
此组数据x=2,让这2场比赛名次分别是(2),(4)
可获得名次如下
1 1 (2) 3 (4) 5 7 10
可以发现,从名次1开始,连续名次,最大值是5

1 100
100

101
此组数据x=100,让这100场比赛名次分别是(1),(2),......,(98),(99),(101)
可获得名次如下
(1),(2),......,(98),(99),100,(101)
可以发现,从名次1开始,连续名次,最大值是101

11 1
1 1 1 1 1 1 1 1 1 1 1

2
此组数据x=1,让这1场比赛名次是(2)
可获得名次如下
1 1 1 1 1 1 1 1 1 1 1 (2)
可以发现,从名次1开始,连续名次,最大值是2

1 1
1

2
此组数据x=1,让这1场比赛名次是(2)
可获得名次如下
1 (2)
可以发现,从名次1开始,连续名次,最大值是2


4 57
80 60 40 20

60
此组数据x=57,让这57场比赛名次名次分别是
(1),(2),......,(18),(19),(21),(22),......,(38),(39),(41),(42),......(58),(59)
可获得名次如下
(1),(2),......,(18),(19),20,(21),(22),......,(38),(39),40,(41),(42),......(58),(59),60,80
可以发现,从名次1开始,连续名次,最大值是60

该题坑点较多,但样例数据若能通过,那么坑点也就基本跳过。

AC代码如下

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int cnt[210];
int main(){
	int t,n,x,i,v,a,k;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&x);
		memset(cnt,0,sizeof(cnt)),k=0;
		for(i=1;i<=n;i++)scanf("%d",&a),cnt[a]++;//cnt[a]统计a值是否出现过
		for(i=1;i<=200;i++)//根据题意,名词最大值可取到200
			if(cnt[i]==0){//i名次值未出现过
				k++;//用未来场次来填补
				if(k==x){//未来场次已用完
					v=i;
					break;
				}
			}
		for(i=v+1;i<=200;i++)//虽然未来场次已用完,但要看看,之后的数据是否还是连续的,请注意i取值自v+1开始
			if(cnt[i]==0)break;//数据断裂
			else v=i;//之后的数据是还是连续的,赋值给v
		printf("%d\n",v);
	}
	return 0;
}

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值