Codeforces 990B :Micro-World
2 seconds
256 megabytes
standard input
standard output
You have a Petri dish with bacteria and you are preparing to dive into the harsh micro-world. But, unfortunately, you don't have any microscope nearby, so you can't watch them.
You know that you have nn bacteria in the Petri dish and size of the ii-th bacteria is aiai. Also you know intergalactic positive integer constant KK.
The ii-th bacteria can swallow the jj-th bacteria if and only if ai>ajai>aj and ai≤aj+Kai≤aj+K. The jj-th bacteria disappear, but the ii-th bacteria doesn't change its size. The bacteria can perform multiple swallows. On each swallow operation any bacteria ii can swallow any bacteria jjif ai>ajai>aj and ai≤aj+Kai≤aj+K. The swallow operations go one after another.
For example, the sequence of bacteria sizes a=[101,53,42,102,101,55,54]a=[101,53,42,102,101,55,54] and K=1K=1. The one of possible sequences of swallows is: [101,53,42,102,101––––,55,54][101,53,42,102,101_,55,54] →→ [101,53–––,42,102,55,54][101,53_,42,102,55,54] →→ [101––––,42,102,55,54][101_,42,102,55,54] →→ [42,102,55,54–––][42,102,55,54_] →→ [42,102,55][42,102,55]. In total there are 33 bacteria remained in the Petri dish.
Since you don't have a microscope, you can only guess, what the minimal possible number of bacteria can remain in your Petri dish when you finally will find any microscope.
The first line contains two space separated positive integers nn and KK (1≤n≤2⋅1051≤n≤2⋅105, 1≤K≤1061≤K≤106) — number of bacteria and intergalactic constant KK.
The second line contains nn space separated integers a1,a2,…,ana1,a2,…,an (1≤ai≤1061≤ai≤106) — sizes of bacteria you have.
Print the only integer — minimal possible number of bacteria can remain.
7 1
101 53 42 102 101 55 54
3
6 5
20 15 10 15 20 25
1
7 1000000
1 1 1 1 1 1 1
7
The first example is clarified in the problem statement.
In the second example an optimal possible sequence of swallows is: [20,15,10,15,20–––,25][20,15,10,15,20_,25] →→ [20,15,10,15–––,25][20,15,10,15_,25] →→ [20,15,10–––,25][20,15,10_,25] →→[20,15–––,25][20,15_,25] →→ [20–––,25][20_,25] →→ [25][25].
In the third example no bacteria can swallow any other bacteria.
题意:有n个细菌,每个细菌的尺寸为ai,现在有以常数k,如果细菌i的尺寸ai大于细菌j的尺寸aj,并且ai<=aj+k,那么细菌i就可以吃掉细菌j,问最后可以剩于多少个细菌。
我的思路:对数组a进行降序排序,并记录下来次大值出现的位置,将最大值出现的个数记为j,j-1得到无法进行吞噬的细胞数,即最后剩下的细胞中一定会包括所有的尺寸最大的细胞。将排好序的细胞从n位置开始去重。
如果所有的细胞尺寸相同,最终结果等于n。如果尺寸不全相同,遍历去重后的数组,查找有多少相邻元素不符合要求,更新ans的值
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int a[maxn];
int b[maxn];
bool cmp(int x,int y)
{
return x>y;
}
int main(int argc, char const *argv[])
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n,cmp);
int x=0;
int ans=0;
memset(b,0,sizeof(b));
b[x]=a[0];
int flag=1;
int j;
for(j=1;;j++)
{
if(a[0]==a[j])
ans++;
else
break;
}//查找次大值出现的位置和最大值出现的次数
for(int i=j;i<n;i++)
{
if(a[i]==b[x])
flag+=1;
if(a[i]==b[x]&&abs(a[i]-b[x-1])>k)
{
ans++;
}
else
b[++x]=a[i];
}//对数组进行去重
if(flag==n)
ans=n;//如果所有元素相同,ans=n
else
{//否则,遍历数组
for(int i=0;i<x;i++)
{
if(b[i]-b[i+1]>k)
ans++;
}
ans++;
}
cout<<ans<<endl;
return 0;
}
另一种做法(百度上找的,比我写的简单了好多):用一个数组记录相同尺寸细菌的个数,然后进行去重排序,从次小的细胞开始比较相邻的细胞是否符合要求,如果符合要求,减去较大尺寸细胞的个数
原帖地址:点击打开链接
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int a[maxn];
int b[maxn];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
memset(b,0,sizeof(b));
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
b[a[i]]++;
}
sort(a,a+n);
int len=unique(a,a+n)-a;
int ans=n;
for(int i=1;i<len;i++)
if(a[i]>a[i-1]&&a[i]<=a[i-1]+k)
ans-=b[a[i-1]];
cout<<ans<<endl;
return 0;
}
Codeforces 990B :Micro-World的更多相关文章
- Codeforces 731C:Socks(并查集)
http://codeforces.com/problemset/problem/731/C 题意:有n只袜子,m天,k个颜色,每个袜子有一个颜色,再给出m天,每天有两只袜子,每只袜子可能不同颜色,问 ...
- Codeforces 747D:Winter Is Coming(贪心)
http://codeforces.com/problemset/problem/747/D 题意:有n天,k次使用冬天轮胎的机会,无限次使用夏天轮胎的机会,如果t<=0必须使用冬轮,其他随意. ...
- Codeforces 747C:Servers(模拟)
http://codeforces.com/problemset/problem/747/C 题意:有n台机器,q个操作.每次操作从ti时间开始,需要ki台机器,花费di的时间.每次选择机器从小到大开 ...
- Codeforces 749D:Leaving Auction(set+二分)
http://codeforces.com/contest/749/problem/D 题意:有几个人在拍卖场竞价,一共有n次喊价,有q个询问,每一个询问有一个num,接下来num个人从这次拍卖中除去 ...
- Codeforces 749B:Parallelogram is Back(计算几何)
http://codeforces.com/problemset/problem/749/B 题意:已知平行四边形三个顶点,求另外一个顶点可能的位置. 思路:用向量来做. #include <c ...
- Codeforces 749C:Voting(暴力模拟)
http://codeforces.com/problemset/problem/749/C 题意:有n个人投票,分为 D 和 R 两派,从1~n的顺序投票,轮到某人投票的时候,他可以将对方的一个人K ...
- Codeforces 746D:Green and Black Tea(乱搞)
http://codeforces.com/contest/746/problem/D 题意:有n杯茶,a杯绿茶,b杯红茶,问怎么摆放才可以让不超过k杯茶连续摆放,如果不能就输出NO. 思路:首先,设 ...
- Codeforces 745C:Hongcow Builds A Nation(并查集)
http://codeforces.com/problemset/problem/744/A 题意:在一个图里面有n个点m条边,还有k个点是受限制的,即不能从一个受限制的点走到另外一个受限制的点(有路 ...
- Codeforces 743D:Chloe and pleasant prizes(树形DP)
http://codeforces.com/problemset/problem/743/D 题意:求最大两个的不相交子树的点权和,如果没有两个不相交子树,那么输出Impossible. 思路:之前好 ...
随机推荐
- SimpleDateFormat实现String与Date之间的转换
基本用法: java.text.SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd"); java.util.Date ...
- http之响应报文response
一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息. HTTP响应也由四个部分组成,分别是:状态行.消息报头.空行和响应正文. http响应消息格式.jpg 例子 HTTP/ ...
- TED #03# 10 ways to have a better conversation
Teach you how to talk and how to listen Many of you have already heard a lot of advice on this, thin ...
- Vue学习笔记之Vue指令系统介绍
所谓指令系统,大家可以联想咱们的cmd命令行工具,只要我输入一条正确的指令,系统就开始干活了. 在vue中,指令系统,设置一些命令之后,来操作我们的数据属性,并展示到我们的DOM上. OK,接下来我们 ...
- 20145221 《Java程序设计》第三周学习总结
20145221 <Java程序设计>第三周学习总结 教材学习内容总结 第四章部分已在假期完成,详见博客: <Java程序设计>第四章-认识对象 第五章部分 何谓封装 封装实际 ...
- UVA 257 Palinwords(hash)题解
思路:给你字符串,如果他包含至少两个长度大于等于3的回文,并且这些回文不能嵌套(例如aaa嵌套在aaaa,waw嵌套在awawa),如果这个字符串这么牛逼的话,就输出他. 思路:拿到字符串先正序has ...
- asp.net web api的源码
从安装的NuGet packages逆向找回去 <package id="Microsoft.AspNet.WebApi.Core" version="5.2.7& ...
- CSS 再学习,文本处理
文本缩进(对p,div有效:对span无效) p {text-indent: 5em;} Tips:一般来说,可以为所有块级元素应用 text-indent,但无法将该属性应用于行内元素(span), ...
- Java网络编程学习A轮_06_NIO入门
参考资料: 老外写的教程,很适合入门:http://tutorials.jenkov.com/java-nio/index.html 上面教程的译文:http://ifeve.com/overview ...
- JavaScript--语法2--语句结构
JavaScript--语句结构 一.心得 判断的时候常量放左边java中switch只支持四种类型,javaScript是弱类型,所有的都支持. 显示方法: 77 // alert("x= ...