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)=\ ...
随机推荐
- 2-MySQL数据库编码uft-8
mysql> show variables like 'character%'; mysql> show variables like 'collation%'; mysql> st ...
- HTML5--拖动01
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Android仿“守望先锋”加载动画
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 效果图 实现思路 画一个小六边形 按效果图位置画七个小六边形 实现一个小六边形的显示与隐藏 ...
- sql语句修改字段长度
sql语句修改字段长度 alter table <表名> alter column <字段名> 新类型名(长度) 例: alter table students alter c ...
- SQL2008代理作业出现错误: c001f011维护计划创建失败的解决方法
SQL2008数据库总会出现从 IClassFactory 为 CLSID 为 {17BCA6E8-A95D-497E-B2F9-AF6AA475916F} 的 COM 组件创建实例失败,原因是出现以 ...
- 精益化设计:把敏捷方法和Lean UX相结合
敏捷方法已经成为了主流.同时,Kindle和iPhone等设备取得的巨大成功也推动了体验设计的飞速发展.不过,如何把敏捷方法和UX设计结合起来,一直以来都是一个难题.文章将探讨如何把UX融入到最流行的 ...
- 搜索引擎LuceneNet
http://www.cnblogs.com/edisonchou/p/5348625.html
- Kerberos
一.Kerberos Concept Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务,为通信双方提供双向身份认证. Kerberos关键术语: ...
- oracle迁移postgres之-Ora2Pg
描述 Ora2Pg:甲骨文PostgreSQL数据库模式转换器是一个免费的工具用于Oracle数据库迁移到PostgreSQL兼容模式.它连接Oracle数据库,扫描它自动提取其结构或数据,然后生成S ...
- SQL Server2014,附加数据库失败,错误为:5120的解决方法
在SQL Server 2014附加数据库的时候,报错为: 无法打开物理文件XXX,操作系统错误5(拒绝访问),SQL Server 错误5120 解决方法: 我的电脑→管理→服务和应用程序→ 服务 ...