YYHS-怎样更有力气
题目描述
长者回答:“你啊,Too Young Too Simple,Sometimes Naive!如果你想要我教你,你要先进行艰苦的修行。”
输入
输出
样例输入
2 5
4 8
9 10
样例输出
提示
测试点编号
|
n
|
m
|
x
|
1
|
n≤10
|
m≤1
|
|
2
|
n≤10
|
m≤10
|
|
3
|
n≤100
|
m≤100
|
|
4
|
n≤1000
|
m≤1000
|
|
5
|
n≤10000
|
m≤10000
|
|
6
|
n≤100000
|
m≤100000
|
x=0
|
7
|
n≤1018
|
||
8
|
n≤100000
|
|
|
9
|
n≤1018
|
||
10
|
题解
这道题首先是二分需要的天数
然后你需要统计出哪些区间没有被涂,然后用自己每天能涂的数量判断天数是否可以
但是自己刚开始被如何统计剩余区间给卡住了,后来才知道可以把记者涂的区间从小到大排序(双关键字),然后就是判断剩余区间了
当一段区间是4 5,后面一段是6 7的时候是没有区间漏涂的,所以判断q[i].l-q[i-1].r>1,但其实这样是不对的,自己就是被这个坑了
比如
3 7
4 5
7 8
如果判断q[i].l-q[i-1].r>1,就会以为6~7这段区间是没有被涂得,但是其实前面3 7已经涂到7了,是没有剩余的,所以就要统计之前的max{q[i].r},判断q[i].l-Max>1
统计完剩余区间后是计算自己涂的次数
这里要多判断一下x=0的情况,还有要考虑到x很大的情况,说不定能够涂到两块区间的情况
最后还要注意读入的n是10的18次,要long long读入
#include<bits/stdc++.h>
#define ll long long
#define M 100005
using namespace std;
ll n,m,k,num,ss;
int l,r,mid;
ll x[M],y[M];
bool Flag;
struct node{ ll x,y; }b[M],a[M],q[M];
bool cmp(node x,node y){
if (x.x!=y.x) return x.x<y.x;
else return x.y<y.y;
}
int main(){
scanf("%lld%lld%lld",&n,&m,&k);
for (int i=;i<=m;i++)
scanf("%lld%lld",&a[i].x,&a[i].y);
l=; r=m;
while (l<=r){
mid=(l+r)>>;
for (int i=;i<=mid;i++) b[i]=a[i];
sort(b+,b++mid,cmp);
int cnt=;
if (b[].x>) q[++cnt].x=,q[cnt].y=b[].x-;
ll Max=b[].y;
for (int i=;i<=mid;i++){
if (b[i].x-Max>) q[++cnt].x=Max+,q[cnt].y=b[i].x-;
if (b[i].y>Max) Max=b[i].y;
}
if (Max<n) q[++cnt].x=Max+,q[cnt].y=n;
bool flag=false;
num=; int p=;
ll last=,s;
if (!k){
if (cnt>) flag=true;
} else
while (p<=cnt){
if (q[p].x<=last&&q[p].y>last) q[p].x=last+; else
if (q[p].y<=last){
p++; continue;
}
s=(q[p].y-q[p].x)/k+;
num=num+s;
if (num>mid){
flag=true; break;
}
last=q[p].x+s*k-;
p++;
}
if (flag) l=mid+; else{
Flag=true;
ss=mid;
r=mid-;
}
}
if (!Flag) puts("Poor Douer!");
else printf("%d\n",ss);
return ;
}
YYHS-怎样更有力气的更多相关文章
- UOJ#61. 【UR #5】怎样更有力气
大力水手问禅师:“大师,很多事情都需要用很大力气才能完成,而我在吃了菠菜之后力气很大,于是就导致我现在非常依赖菠菜.我很讨厌我的现状,有没有办法少吃点菠菜甚至不吃菠菜却仍很有力气?” 禅师浅笑,答:“ ...
- 【NOIP2017练习】怎样更有力气(二分答案,线性扫描)
题意:OI大师抖儿在夺得银牌之后,顺利保送pku.这一天,抖儿问长者:“我虽然已经保送了,但我的志向是为国家健康工作五十年.请问我应该怎样变得更有力气?” 长者回答:“你啊,Too Young T ...
- 【UOJ#61】【UR #5】怎样更有力气(最小生成树)
[UOJ#61][UR #5]怎样更有力气(最小生成树) 题面 UOJ 题解 最最最暴力的想法是把所有边给处理出来然后跑\(MST\). 考虑边权的情况,显然离线考虑,把么一天按照\(w_i\)进行排 ...
- 「UR#5」怎样更有力气
「UR#5」怎样更有力气 解题思路 考虑没有限制的情况,一定是把操作离线下来,按照边权从小到达做.可以发现,如果没有限制,完全图是多余的,直接拿树边进行合并就可以了.我们要做这么一件事情,把每个点属于 ...
- 【UR #5】怎样更有力气
Problem Description 大力水手问禅师:"大师,很多事情都需要用很大力气才能完成,而我在吃了菠菜之后力气很大,于是就导致我现在非常依赖菠菜.我很讨厌我的现状,有没有办法少吃点 ...
- [UOJ61]怎样更有力气
这个题还是挺有意思的... 一个小结论是:在一个$n$点$m$边的图中,如果度数最小的点度数为$d$,那么$d^2=O(m)$,因为$d\leq\frac{2m}n$,所以$d^2\leq dn\le ...
- UOJ61. 【UR #5】怎样更有力气
题目链接 Statement 给定一棵 \(n\) 点树 \(T\) 和 \(m\) 个操作 v u w : 在 \(T\) 中 \(u,v\) 的最短路上所有点里面选出若干对(可以不选,可以重复), ...
- 校际联合Contest
每次开一个坑都像是重新被碾压的预感 最近的新闻,以前很喜欢乔任梁的<复活>...然后他就死了...感觉我再多愁善感一点的话...就要悲伤逆流成河了吧... Contest 09/24(乐滋 ...
- 如何编写高质量的 jQuery 代码?
想必大家对于jQuery这个最流行的javascript类库都不陌生,而且只要是前端开发人员肯定或多或少的使用或者接触过,在今天的这篇文章中,我们将介绍一些书写高质量jQuery代码的原则,我们不单单 ...
随机推荐
- Fluent Validation with Web Api 2
using FluentValidation;using FluentValidation.Attributes;using System;using System.Collections.Gener ...
- 给View添加手势,防止点击View上其他视图触发点击效果
在开发过程中,我们可能会遇到这个问题. 当我们给一个view添加了手势,但是我们又不想点击view上面的视图也触发手势.如下图: 我们在红色view上添加了手势,但是又不想点击黄色view也触发.其实 ...
- Mysql MHA(GTID)配置(实操)
实现环境 centos6.7 MYSQL5.6.36 主:192.168.1.191 从1:192.168.1.145 从2:192.168.1.146 监测:放在从2上 192.168.1.146 ...
- .net core 2.0学习笔记(二):Hello World & 进阶
官网已经有一个.net core的入手教程(https://www.microsoft.com/net/core#windowscmd),但这个教程完全没有顾及全宇宙第一IDE的感受.今天就跟大家体验 ...
- python ——面向对象进阶
1.staticmethod和classmethod staticmethod 静态方法: 让类里的方法,直接被类调用,就像正常的函数一样 宝宝,男 博博,女 海娇,男 海燕,女 海东,男 海峰,男 ...
- Tomcat 部署安装及JVM调优~
Tomcat 部署Tomcat环境 环境准备 linux: CentOS 7.3 tomcat: 9.0.0.M21 jdk: 1.8.0_131 ip: 192.168.1.5 tomcat官方下载 ...
- How to call C/C++ sytle function from C# solution?
1. Write native(unmanaged) code with C/C++, and make sure compile it as a DLL, the sample is as belo ...
- 一点点刚学不久的JS
1 js中的变量和输入输出 {使用js的三种方式} 1 在html标签中直接内嵌js(并不提倡使用): <button onclick="alert('小婊砸你真点啊!')&quo ...
- Fedora删除旧版本内核
由于Fedora升级非常快,因此非常有必要清除陈旧的内核,否则的话,每次登录系统会出现多个引导项,看着烦人也占用内存: 1.查看当前使用的内核 [root@w ~]# uname -r 4.9.14- ...
- 操作手册(1)JDK的安装与配置
1 JDK的安装与配置 1.1 背景 JDK(Java SE Development Kit)是 Java 语言开发工具包的简称,是开发和运行 Java 程序的基础环境. 更多描述 | 百度百科: → ...