hdu 5596 GTW likes gt
题目链接: hdu 5596
题意不难懂(虽然我还是看了好久)大概就是说 n 个人排成一列,分成两组, 第 i 秒时第 i 个人会消灭掉前面比他 b[i] 值低的且和他不同组的人,c[i] 表示第 c[i] 秒时前面 1~c[i] 个人每个人的 b[i] 值都会 +1,问你最后还会存活几个人。
一开始看到它的数据范围我在想会不会需要用到树状数组或线段树去优化呢?(惯性思维改不了 -.-||),后来觉得好像有其他的简单的方法,认真想了好久然后试了一下果然可以:离线处理(一开始以为它强制在线,后来发现离线还是可以的),先处理所有 c[i] 的值,也就是对于每个 c[i],都把 b[1~c[i]] 的值 +1,当然两重循环是不行的,需要找下规律然后排序二分优化到 nlogn。预处理好后逆序枚举,维护两个变量 Max_0 和 Max_1,分别表示两组中的最大的 b[i] 值,然后每枚举到第 i 个数时,看 b[i] 是否 >= Max_?(第 i 个人对面的组中最大那个 b[i] 值,当 b[i] 组号为 0 时,此时比较 b[i] >= Max_1,否则比较 b[i] >= Max_0),若大于等于的话,表示 b[i] 后面的敌方人里面没有能杀死 b[i] 的,此时 ans+ 1;然后就是维护对应的 Max_ 值了。
代码如下:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define For(i,s,t) for(int i = s; i < t; ++i)
const int N = ; int b[N], c[N];
int sign[N]; template<typename T>
int find(const T * const c, int low, int up, const T &x) {
int mid;
while(low <= up) {
mid = low + ((up - low) >> );
if(x < c[mid] || !(c[mid] < x)) up = mid - ;
else low = mid + ;
}
return low;
} int main() {
int t,n,m,tmp;
scanf("%d",&t);
while(t--) {
scanf("%d %d",&n,&m);
For(i, , n + )
scanf("%d %d", sign + i, b + i);
For(i, , m + )
scanf("%d", c + i);
sort(c + , c + m + ); For(i, , n + ) {
int id = find(c, , m, i);
b[i] += m + - id;
}
int ans = ;
int Max_0 = , Max_1 = ;
for(int i = n; i >= ; --i) {
if(sign[i] == ) {
if(b[i] >= Max_1) ++ans;
Max_0 = max(Max_0, b[i]);
}
else if(i[sign] == ) {
if(b[i] >= Max_0) ++ans;
Max_1 = max(Max_1, b[i]);
}
}
printf("%d\n", ans);
}
return ;
}
二分函数写成模板不过是无聊(0.0)
1A 掉的,感觉还是挺兴奋的,已经好久没刷过题,好久没有过这种感觉了。从1月初期末考过后就一直忙,bc 不知道多少周没去碰过了,自从晋级到 div1 后竟然一场真正的 div1 都没去打过,真是惭愧~~趁下班公司人少少时才敢刷题放松下,kubi 的实习生活……估计这几周的周末是没有的了,明天还得继续撸码从0开始学xx框架。
***************************************************2016年11月27日更新****************************************************
上面的二分查找函数可以优化下,把判断条件的大小比较写成
if(c[mid] < x) low = mid + 1;
else up = mid - 1;
这样子就能省去一个不必要的比较步骤了,逻辑也更清晰一些。
hdu 5596 GTW likes gt的更多相关文章
- HDU 5596 GTW likes gt 倒推
GTW likes gt 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5596 Description Long long ago, there w ...
- HDU 5596 ——GTW likes gt——————【想法题】
GTW likes gt Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- HDU 5597 GTW likes function 打表
GTW likes function 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5596 Description Now you are give ...
- HDU 5597 GTW likes function 欧拉函数
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5597 题意: http://bestcoder.hdu.edu.cn/contests/contes ...
- Hdu 5595 GTW likes math
题意: 问题描述 某一天,GTW听了数学特级教师金龙鱼的课之后,开始做数学<从自主招生到竞赛>.然而书里的题目太多了,GTW还有很多事情要忙(比如把妹),于是他把那些题目交给了你.每一道题 ...
- hdu 5595 GTW likes math(暴力枚举查询)
思路:直接暴力枚举区间[l,r]的整数值,然后max和min就可以了. AC代码: #pragma comment(linker, "/STACK:1024000000,1024000000 ...
- HDU 5596/BestCoder Round #66 (div.2) GTW likes math 签到
GTW likes math Memory Limit: 131072/131072 K (Java/Others) 问题描述 某一天,GTW听了数学特级教师金龙鱼的课之后,开始做数学<从自主 ...
- hdu-5596 GTW likes gt(模拟+优先队列)
题目链接: GTW likes gt Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- HDU5597/BestCoder Round #66 (div.2) GTW likes function 打表欧拉函数
GTW likes function Memory Limit: 131072/131072 K (Java/Others) 问题描述 现在给出下列两个定义: f(x)=f_{0}(x)=\ ...
随机推荐
- Excel应该这么玩——5、三种数据:Excel也是系统
Excel最常用的功能就是记录数据,把数据按照行列记录下来.这部分数据是源数据,是业务活动中最原始的流水账,作为后续操作的依据.为了从源数据中得出一定的结论,需要对源数据进行分析得出报表数据. ...
- Yii2中多表关联查询(join、joinwith)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name ...
- JS的window.onload与JQuery的$(document).ready(function(){})的区别
前段时间去面试被问及JS的加载(onload)与jQuery中加载(ready)方法的区别,瞬时懵逼了,关于这个知识点平时还真没怎么注意. 最近先来无事便查了一下资料, onload 事件(W3c上给 ...
- 如何在LIRE搜索中使用多特征
这是官网上的解答,先mark下来. http://www.semanticmetadata.net/wiki/lirefaq/ ==================================== ...
- Spring实现IOC
目录 一.使用XML配置的方式实现IOC 二.使用Spring注解配置IOC 三.自动装配 四.零配置实现IOC 五.示例下载 控制反转IoC(Inversion of Control),是一种设计思 ...
- ip相关
查看ip ifconfig -a 查看端口占用 ps -aux | grep tomcat
- windows平台下基于VisualStudio的Clang安装和配置
LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...
- 一个ubuntu phper的自我修养(杂记)
ubuntu使用杂记 1.flatabulous安装使用. flatabulous是一个ubuntu图标主题. 使用它,必须得安装tweak插件. sudo add-apt-repository pp ...
- centos6.x开机卡死
问题描述: centos6.x开机卡死在进度条处 远程登录,查看系统日志,看看卡在哪儿 通过远程连接,tail -fn 20 /var/log/messages 发现报错: init: prefdm ...
- selenium截图对比校验方法
/**对比图片进行校验是否成功**/package com.allin.pc;import java.awt.image.BufferedImage;import java.awt.image.Dat ...