HihoCode-1053-居民迁移
解法:
一开始不会做,看到标签说是贪心加二分忽然就会了,二分是分的是人口最多居住点的人口,检查人口最多的居住点人口为mid是否可行。贪心是如果从左往右循环就尽量把人口往左迁移,如果从右往左循环就尽量把人口往右迁移。
- 二分 + 贪心
1053 居民迁移 AC G++ 201ms 7MB - #include "bits/stdc++.h"
- using namespace std;
- typedef long long LL;
- typedef pair<int, int> PII;
- const int MAXN = ;
- PII arr[MAXN];
- int t, n, m;
- bool check(int mid) {
- int k = , id = ;
- for (int i = ; i <= n; i++) {
- // 第i号居住点的居民已经无法迁移到第id号居住点的情况
- while (arr[i].first - arr[id].first > m) {
- // 让第i号居住点的居民迁移到下一个居住点,并初始化第id + 1号居住点的人口为0;
- id++;
- k = ;
- }
- k += arr[i].second;
- // 因为每个居住点最多住mid人,当k大于mid时,剩下的居民要去下一个居住点
- while (k > mid) {
- k -= mid;
- id++;
- }
- // 前者表示越出,无第id号居住点;后者表示第i号点的居民无法迁移到第id号点,但是前面的点都满员了;
- if (id > n || arr[id].first - arr[i].first > m) {
- return false;
- }
- }
- return true;
- }
- int main() {
- scanf("%d", &t);
- while (t--) {
- scanf("%d%d", &n, &m);
- for (int i = ; i <= n; i++) {
- scanf("%d%d", &arr[i].first, &arr[i].second);
- }
- sort(arr + , arr + + n);
- int l = , r = 1e9;
- while (l < r - ) {
- int mid = l + r >> ;
- if (check(mid)) {
- r = mid;
- } else {
- l = mid;
- }
- }
- printf("%d\n", r);
- }
- return ;
- }
- #include "bits/stdc++.h"
HihoCode-1053-居民迁移的更多相关文章
- hihoCoder #1053 : 居民迁移(贪心,二分搜索,google在线技术笔试模拟)
#1053 : 居民迁移 时间限制:3000ms 单点时限:1000ms 内存限制:256MB 描述 公元2411年,人类开始在地球以外的行星建立居住点.在第1326号殖民星上,N个居住点分布在一条直 ...
- HihoCoder 1053 居民迁移
居民迁移 时间限制:3000ms 单点时限:1000ms 内存限制:256MB 描述 公元2411年,人类开始在地球以外的行星建立居住点.在第1326号殖民星上,N个居住点分布在一条直线上.为了方便描 ...
- HihoCoder 1053 : 居民迁移 二分+贪心+双指针(好题)
居民迁移 时间限制:3000ms 单点时限:1000ms 内存限制:256MB 描述 公元2411年,人类开始在地球以外的行星建立居住点.在第1326号殖民星上,N个居住点分布在一条直线上.为了方便描 ...
- hiho_1053_居民迁移
题目大意 有N个居民点在一条直线上,每个居民点有一个x表示坐标,y表示居民点的现有居民数.现在要求将居民点的居民重新分配,每个居民点的居民最远迁移的距离为R,要求分配完之后,居民点中居民数最多的居民点 ...
- 洛谷P1196 银河英雄传说[带权并查集]
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...
- codevs1540 银河英雄传说
描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶集 ...
- H20的题——[noip2003]银河英雄传(并查集)
公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶集团派宇 ...
- NOI2002 洛谷 P1196 银河英雄传说
神奇的并查集问题 题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩 ...
- 洛谷OJ P1196 银河英雄传说(带权并查集)
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...
随机推荐
- Spark核心算子
Spark RDD: Transformation Meaning map(func) 返回一个新的分布式数据集,该数据集是通过将源的每个元素传递给函数func处理形成的. filter(func) ...
- java字符串排序(数字,字母,汉字等组合排序)
package cn.cnnho.backstage.utils; import java.util.ArrayList;import java.util.Arrays;import java.uti ...
- Tensorflow基础笔记
1.Keras是一个由Python编写的开源人工神经网络库. 2.深度学习主要应用在三个大的方向,计算机视觉,自然语言处理,强化学习 3.计算机视觉主要有:图片识别,目标检测,语义分割,视频理解(行为 ...
- 通过ES6 封装了一个上传文件的方法 XMLHttpRequest() 通用
### 上传进度回显,上传速度回显 ### 源码如下,新建index.js装起来 export class UploadServers { constructor (options) { this.x ...
- PPT制作不加班的十个小窍门
五个一键: 情景一: 上司:小万,什么字体啊这是,全部换成微软雅黑. 一键替换字体: 单击任意文本框——开始菜单栏——替换(下拉三角)——替换字体——替换为——替换. 情景二: 上司:小万,“咖啡 ...
- 17.3.12--uillib模块
1---uillib是python标准库中最常用的一个python网络应用资源访问的模块,他可以让你像访问文本一样,读取网页的内容 它的作用是访问一些不需要验证的网络资源和cookie等 uillib ...
- 吴裕雄--天生自然ShellX学习笔记:Shell简介
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个 ...
- vector内部的实现1
写vector的内部方法 #include<vector> using std::vector; //写一个动态内存 class CA{ int a; public: CA(int i){ ...
- Python—快速排序算法
# _*_ coding=utf-8 _*_ """ 快速排序: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比 另外一部分的所有数据都要小,然后 ...
- CF633H Fibonacci-ish II(莫队+线段树)
温馨提示:本题十分卡常数,我手动开O2才过的.而数据范围不伦不类的n<=30000,常数小的O(n2)居然比O(n√nlogn)跑得快…… 考虑插进去一个元素对答案产生的影响.原本数列为Σa[i ...