[ An Ac a Day ^_^ ] HihoCoder 1249 Xiongnu's Land 线性扫描

拿到了icpc北京站的参赛名额 感谢亮哥~

虽然是地狱之战 但也要全力以赴!

题意:

有一片沙漠 n片绿洲 让你用一条线分成两部分

左≥右 而且分割线要尽量靠右 问线的位置

思路:

网上说可以二分 没太看懂……

还有一种思路就是线性扫描

将二维的图化成一维的线 然后从头扫一遍

遇到左≥sum/2时试探着向右继续扫

最后输出答案

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<math.h>
 5 #include<string.h>
 6 #include<string>
 7 #include<map>
 8 #include<set>
 9 #include<vector>
10 #include<queue>
11 #define M(a,b) memset(a,b,sizeof(a))
12 using namespace std;
13 typedef long long ll;
14 const int inf=0x3f3f3f;
15 const int maxn=1e6+10;
16 ll line[maxn];
17 int main(){
18     int T;
19     scanf("%d",&T);
20     while(T--){
21         int sq;
22         scanf("%d",&sq);
23         int n;
24         scanf("%d",&n);
25         int x,y,w,h;
26         M(line,0);
27         ll sum=0;
28         for(int i=0;i<n;i++){
29             scanf("%d%d%d%d",&x,&y,&w,&h);
30             for(int j=x;j<x+w;j++){ //将二维的图转化成一维的线 使时间复杂度达到线性时间O(n)
31                 line[j]+=h;
32                 sum+=h;
33             }
34         }
35         sum++;
36         sum/=2;
37         ll cal=0;
38         for(int i=0;i<=sq;i++){ //扫描
39             cal+=line[i];
40             if(cal>=sum){ //已经符合题意
41                 i++;
42                 while(line[i]==0&&i<sq) i++; //试探着继续扫
43                 printf("%d\n",i);
44                 break;
45             }
46         }
47     }
48     return 0;
49 }
50 /*
51
52 2
53 1000
54 2
55 1 1 2 1
56 5 1 2 1
57 1000
58 1
59 1 1 2 1
60
61 */

[ An Ac a Day ^_^ ] HihoCoder 1249 Xiongnu's Land 线性扫描

时间: 2024-11-06 11:33:54

[ An Ac a Day ^_^ ] HihoCoder 1249 Xiongnu's Land 线性扫描的相关文章

15北京区域赛——A 二分——hihoCoder 1249 Xiongnu&#39;s Land

两次二分,第一次取得最小值,第二次往右二分看是否能到更右边 注意超出部分land部分要去掉 #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; struct edge{ int x, y, w, h; }a[10010]; bool cmp(edge A, edge B) { return A.x < B.x; } int n; ll cal(int x) { ll

[hihocoder 1249 Xiongnu&#39;s Land]线性扫描

2015区域赛北京赛区的三水,当时在赛场上没做出的原因是复杂度分析不正确导致把方法想复杂了.近来复习复杂度分析,觉得不能只是笼统地看渐进复杂度(big-O),更应根据算法的伪码计算真正的以基本操作数为变量的时间复杂度T(n). 题意:在二维坐标系第一象限中,将一块顶点在原点边长为R的正方形土地用直线x=n一分为二,左侧分给Wei,右侧分给Huo. 土地中包含N个绿洲,每个绿洲是一个矩形,其位置和大小用四元组(L,T,W,H)表示,其中(L,T)为其左上方顶点的坐标,W,H为其宽度和高度.绿洲互不

hiho1249 Xiongnu&#39;s Land

题目链接:http://hihocoder.com/problemset/problem/1249 题目大意:有一个大正方形里面有好多不重叠的小矩形,怎么找出一条竖线分割这个正方形,使得两边的矩形面积尽量相等并且正方形左边的面积比右边大 思路:做两次二分就好了 1 #include <stdio.h> 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 #define xx firs

UVALive-7261 Xiongnu&#39;s Land

题目链接 https://vjudge.net/problem/UVALive-7261 题面 Description Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the Xiongnu earned him great acclaim. He was a relative of Emperor Wu because he was the youn

[UVALive7261]A - Xiongnu&#39;s Land (二分)

题目链接:https://vjudge.net/problem/UVALive-7261 题意略 三个步骤: 1.二分满足左边绿洲面积大于等于右边绿洲面积,并且使左边面积尽可能大的分割线位置. 2.判断这个分割线是否包含于任何一个绿洲中,如果包含,那么直接输出结果就行,否则: 3.从此坐标向右扫描,找到下一个绿洲的左边界,此为答案. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 typedef long long LL; 5 typ

UVALive 7261 Xiongnu&#39;s Land(二分)

题目地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5273 思路:二分位置(无需考虑总坐标,仅考虑横坐标即可),使得2*area >= sum,在满足该条件的情况下,尽量右移使得左侧面积尽量大. #include<cstdio> #include<cstring> #include<

2015北京区域赛 Xiongnu&#39;s Land

Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the Xiongnu earned him great acclaim. He was a relative of Emperor Wu because he was the younger half-brother of Empress Wei Zifu (Emperor Wu's wife) and

[leetcode] 1032: Stream of Characters: Tries&amp;AC自动机

其实这道题好像大部分人都直接用Tries倒序来解,但我觉得AC自动机可能更高效一点(毕竟是在Tries基础上优化的算法如果还不如原始Tries似乎说不过去). 根据定义写了个原始的在堆上创建树形结构的solution但好像性能并不是很乐观.另外一些用AC解的dalao好像是用一条线性结构存储所有结点再用指针记录树种结点的连接关系,理解起来相对复杂一些但这样性能应该会比原始的树形结构提升很多. Tries 根据设定的字典中所有单词创建的字典树,对输入字符串的匹配过程就是对tries的遍历.如果某个

[转]SPICE仿真软件基础(整理)

现在常用的SPICE仿真软件为方便用户使用都提供了较好的用户界面,在用仿真库中的元器件连成原理图后就可以进行仿真(当然要设置必要的仿真参数),但实际上只是用原理图自动产生了SPICE的格式语句,还是要通过读取语句来进行仿真,这是历史的遗留问题.在当时的技术条件下,不能用图形方式输入电路结构,只能通过文本文件来描述,也就是所谓网表.SPICE软件的设计者规范了要进行仿真的电路对应的SPICE网表文件格式,还定义了许多仿真描述语句和分析控制语句等,使仿真软件能通过读取这些特殊信息来进行相关计算和运行