Hackerrank--Team Formation
For an upcoming programming contest, Roy is forming some teams from the n students of his university. A team can have any number of contestants.
Roy knows the skill level of each contestant. To make the teams work as a unit, he should ensure that there is no skill gap between the contestants of the same team. In other words, if the skill level of a contestant is x, then he has either the lowest skill level in his team or there exists another contestant with skill level of x−1 in the same team. Also, no two contestants of the same team should have same skill level. Note that, some of the contestants always write buggy codes, their skill levels are negative.
It is clear that more the number of contestants in a team, more the problems they can attempt at a time. So Roy wants to form teams such that the size of the smallest possible team is maximized.
Input Format
The first line of input contains t (1≤t≤100), the number of test cases.
Each case contains an integer n (0≤n≤105), the number of contestants, followed by n space separated integers. The ith integer denotes the skill level of ith contestant. The absolute values of skill levels will not exceed 109.
The total number of contestants in all cases will not exceed 106.
Output Format
For each test case, print the output in a separate line.
Sample Input
4
7 4 5 2 3 -4 -3 -5
1 -4
4 3 2 3 1
7 1 -2 -3 -4 2 0 -1
Sample Output
3
1
1
7
Explanation
For the first case, Roy can form two teams: one with contestants with skill levels
{-4,-3,-5}
and the other one with{4,5,2,3}
. The first group containing3
members is the smallest.In the second case, the only team is
{-4}
In the third case, the teams are
{3}
,{1,2,3}
, the size of the smaller group being1
.In the last case, you can build a group containing all the contestants. The size of the group equals the total number of contestants.
思路:贪心。尽量减少分组的个数。
如果存在以当前这个数-1为结尾的组,那么就找到个数最少的一个将当前这个数加在后面,否则增加一个组,以当前数为结尾。
Accepted Code:
using namespace std;
#include <bits/stdc++.h> #define sgn(x,y) ((x)+eps<(y)?-1:((x)>eps+(y)?1:0))
#define rep(i,n) for(auto i=0; i<(n); i++)
#define mem(x,val) memset((x),(val),sizeof(x));
#define rite(x) freopen(x,"w",stdout);
#define read(x) freopen(x,"r",stdin);
#define all(x) x.begin(),x.end()
#define sz(x) ((int)x.size())
#define sqr(x) ((x)*(x))
#define pb push_back
#define clr clear()
#define inf (1<<28)
#define ins insert
#define xx first
#define yy second
#define eps 1e-9 int main(void) {
ios_base::sync_with_stdio();
int test;
cin >> test;
while ( test-- ) {
map<int, priority_queue<int, vector<int>, greater<int> > > val;
int n;
cin >> n;
vector<int> vec(n);
rep(i, n) {
cin >> vec[i];
}
sort( vec.begin(), vec.end() ); rep(i, n) {
int tmp = vec[i];
int now = ;
auto it = val.find(tmp - );
if (it != val.end() && it->yy.size()) {
now = it->yy.top();
it->yy.pop();
}
now++;
val[tmp].push(now);
}
int ans = INT_MAX;
for ( auto x : val ) if ( x.second.size() )
ans = min( ans, x.second.top() );
if (ans == INT_MAX) ans = ;
cout << ans << endl;
} return ;
}
Hackerrank--Team Formation的更多相关文章
- 位运算 ZOJ 3870 Team Formation
题目传送门 /* 题意:找出符合 A^B > max (A, B) 的组数: 位运算:异或的性质,1^1=0, 1^0=1, 0^1=1, 0^0=0:与的性质:1^1=1, 1^0=0, 0^ ...
- zoj The 12th Zhejiang Provincial Collegiate Programming Contest Team Formation
http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5494 The 12th Zhejiang Provincial ...
- 第十二届浙江省大学生程序设计大赛-Team Formation 分类: 比赛 2015-06-26 14:22 50人阅读 评论(0) 收藏
Team Formation Time Limit: 3 Seconds Memory Limit: 131072 KB For an upcoming programming contest, Ed ...
- ZOJ3870 Team Formation
/** Author: Oliver ProblemId: ZOJ3870 Team Formation */ /* 思路 1.异或运算,使用^会爆,想到二进制: 2.我们可以试着从前往后模拟一位一位 ...
- Team Formation(思维)
Team Formation Time Limit: 3 Seconds Memory Limit: 131072 KB For an upcoming programming contes ...
- 2015 浙江省赛B Team Formation (技巧,动归)
Team Formation For an upcoming programming contest, Edward, the headmaster of Marjar University, is ...
- Zoj 3870——Team Formation——————【技巧,规律】
Team Formation Time Limit: 3 Seconds Memory Limit: 131072 KB For an upcoming programming contes ...
- ZOJ 3870 Team Formation 贪心二进制
B - Team Formation Description For an upcoming progr ...
- ZOJ 3870:Team Formation(位运算&思维)
Team Formation Time Limit: 2 Seconds Memory Limit: 131072 KB For an upcoming programming contest, Ed ...
- 浙江省第十二届省赛 B - Team Formation
Description For an upcoming programming contest, Edward, the headmaster of Marjar University, is for ...
随机推荐
- 洛谷P3834【模板】可持久化线段树 1(主席树)
题目背景 这是个非常经典的主席树入门题--静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输 ...
- gdb调试工具的使用
GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具. GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调 ...
- 【daydayup】ceshuChat
时时当勉励,岁月不待人.珍惜时间伐~ 先看看项目运行的效果 这个是在本地环境打开了两个8080端口进行模拟运行的. 先放下作者的开源地址:https://github.com/ceshu/ceshuC ...
- VUE环境下获取当前时间并格式化--按秒数更新
<el-col :span="8"><div class="grid-content title-time"> {{date}}< ...
- pyQT Dialog默认选中某一个选项问题的解决
方法一: 在新建ui文件时不要新建Dialog # -*- coding: utf-8 -*- # Form implementation generated from reading ui file ...
- php多维数组
一个数组中的值可以是另一个数组,另一个数组的值也可以是一个数组.依照这种方式,我们可以创建二维或者三维数组: 实例 <?php // A two-dimensional array: $cars ...
- JavaScrip中的循环语句
循环语句 循环语句,也是流程控制语句中不可或缺的一种结构.在 JavaScrip中实现循环的方式有好几个一个来看 1.为什么需要循环 在具体介绍 Javascript中的循环之前,首先我们来明确一个问 ...
- UITableViewCell delete button 上有其它覆盖层
第一种解决办法: // Fix for iOS7, when backgroundView comes above "delete" button - (void)willTran ...
- System.Web.Mvc.HttpNotFoundResult.cs
ylbtech-System.Web.Mvc.HttpNotFoundResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, ...
- WhaleCTF之隐写-Find
WhaleCTF之隐写-Find 前往题目 图片保存到本地,用Stegsolve打开图片 找到二维码 用微信或qq扫描,得到flag~