二分查找 2015百度之星初赛1 1001 超级赛亚ACMer

题目传送门

 1 /*
 2     二分找到不大于m的最大的数,记做p,只要a[p] + k <= a[p+1]就继续
 3     注意:特判一下当没有比m小的数的情况:)
 4 */
 5 #include <cstdio>
 6 #include <cstring>
 7 #include <cmath>
 8 #include <algorithm>
 9 using namespace std;
10
11 typedef long long ll;
12
13 const int MAXN = 1e4 + 10;
14 const int INF = 0x3f3f3f3f;
15 ll a[MAXN];
16
17 int main(void)        //2015百度之星初赛1 1001 超级赛亚ACMer
18 {
19     int n, m, k;
20     int t, cas = 0;
21     scanf ("%d", &t);
22     while (t--)
23     {
24         scanf ("%d%d%d", &n, &m, &k);
25         for (int i=1; i<=n; ++i)    scanf ("%I64d", &a[i]);
26         sort (a+1, a+1+n);
27
28         int p = lower_bound (a+1, a+1+n, m) - a - 1;
29 //        printf ("here %d\n", p);
30         bool flag = true;
31         while (p + 1 <= n && a[p] + k >= a[p+1])
32         {
33             p++;
34             if (k > 0)    k--;
35         }
36         if (p < n)    flag = false;
37 //        printf ("here %d\n", p);
38
39         printf ("Case #%d:\n", ++cas);
40         if (m < a[1])    puts ("madan!");
41         else if (!flag)    puts ("madan!");
42         else    puts ("why am I so diao?");
43     }
44
45     return 0;
46 }
47
48 /*
49 2
50 5 11 3
51 15 13 10 9 8
52 5 11 3
53 8 9 10 13 16
54 */
时间: 2024-10-11 07:41:10

二分查找 2015百度之星初赛1 1001 超级赛亚ACMer的相关文章

2015 百度之星 初赛1 1001(贪心)

 Problem Description 百小度是一个ACMer,也是一个超级赛亚人,每个ACMer都有一个战斗力,包括百小度.?所谓超级赛亚人的定义,是说如果在对抗中刚好接近极限状态,那就会激发斗志,实力提升.? 具体来说,就是百小度现在要接受一些ACMer的挑战了,这些ACMer有n个人,第i个人的战斗力是a[i]. ?百小度接下来可以自主安排与这n个ACMer的PK顺序,他要想在PK赛中赢过另外一个ACMer,就必须使得自己的战斗力不小于对方(平局情况他会按照百小度字典上的规则把自己排

百度之星初赛(1)1001 超级赛亚ACMer

#include <cstdio> #include <iostream> #include <cstring> #include <set> #include <cmath> #include <algorithm> #include <vector> #include <map> using namespace std; long long int n,m,k; long long int a[10005]

数学 2015百度之星初赛2 HDOJ 5255 魔法因子

题目传送门 1 /* 2 数学:不会写,学习一下这种解题方式:) 3 思路:设符合条件的数的最高位是h,最低位是l,中间不变的部分为mid,由题意可得到下面的公式(这里对X乘上1e6用a表示,b表示1e6) 4 (h*power+l+mid)*a = (l*power+h+mid)*b 5 可推得:mid = ((h*power+l) * a - (l*power+h) * b) / (a - b); 6 所以可以枚举h,l然后求mid,注意mid的最低位一定是0,因为留出最低位加l或者h 7

LIS 2015百度之星初赛2 HDOJ 5256 序列变换

题目传送门 1 /* 2 LIS(非严格):首先我想到了LIS,然而总觉得有点不对:每个数先减去它的下标,防止下面的情况发生:(转载) 3 加入序列是1,2,2,2,3,这样求上升子序列是3,也就是要修改2个,但是中间的两个2,变化范围又不能超过(1,3) 4 那么这样求的也就不对,但是减掉之后,相当于给中间重复的数留下了修改的空间 5 解释下为什么可以减而保持正确性:因为题目所求时严格递增,假设是2,3, 4,那么变成1, 1, 1,所以在LIS里非严格递增就可以了 6 这也是为什么要在upp

二分搜索 2015百度之星初赛1 1003 序列变换

题目传送门 1 /* 2 二分搜索:在0-1e6的范围找到最小的max (ai - bi),也就是使得p + 1 <= a[i] + c or a[i] - c 3 比赛时以为是贪心,榨干智商也想不出来:( 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <cstring> 8 #include <cmath> 9 #include <iostream> 10 using

BFS 2015百度之星初赛2 HDOJ 5254 棋盘占领

题目传送门 1 /* 2 BFS:先把1的入队,每个1和它相邻的组合后看看能不能使0变1,若有则添加入队,change函数返回改变了多少个0 3 注意:结果还要加上原来占领的 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <cstring> 8 #include <cmath> 9 #include <vector> 10 #include <queue> 11

Kruskal 2015百度之星初赛2 HDOJ 5253 连接的管道

题目传送门 1 /* 2 最小生成树(Kruskal):以权值为头,带入两个端点,自然的排序;感觉结构体的并查集很好看 3 注意:题目老头要的是两个农田的高度差,中文水平不好,题意理解成和平均值的高度差! 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <cstring> 8 #include <cmath> 9 #include <vector> 10 #include &l

2015 百度之星初赛 1 2 2015ACM/ICPC亚洲区上海站 codeforces 851

A - 超级赛亚ACMer HDU - 5246 n m k m >=max( a[i] ); m < min(a[i]); 先判断掉 然后就可以找到最接近的 比m小的一个数 往上涨 看是否能行 O(n) #include<stdio.h> #include<string.h> #include<algorithm> #include<string> #include<iostream> #include<math.h>

2014 百度之星初赛题解1001 - Energy Conversion

Problem Description 魔法师百小度也有遇到难题的时候-- 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久,百小度终于读懂魔法文字的含义:石门里面有一个石盘,魔法师需要通过魔法将这个石盘旋转X度,以使上面的刻纹与天相对应,才能打开石门. 但是,旋转石盘需要N点能量值,而为了解读密文,百小度的能量值只剩M点了!破坏石门是不可能的,因为那将需要更多的能量.不过,幸运的是,作为魔法师的百小度可以耗费V点能量,使