zoukankan      html  css  js  c++  java
  • [ An Ac a Day ^_^ ] HihoCoder 1249 Xiongnu's Land 线性扫描

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

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

    题意:

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

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

    思路:

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

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

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

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

    最后输出答案

    不知道为啥hihocoder能过uvalive死活就是过不去……

     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
    ",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 */
  • 相关阅读:
    oracle热备份与冷备份的对比
    oracle数据库备份
    shell 去除空行
    已有实例 Oracle 下新增实例(2)通过dbca克隆实例
    oracle启动,提示“LRM-00109: could not open parameter file”
    linux——使用fidsk对linux硬盘进行操作【转】
    前端——知识点
    hdu 3996 Gold Mine 最大权闭合子图
    hdu 3917 Road constructions 最大权闭合子图
    poj 2987 Firing 最大权闭合子图
  • 原文地址:https://www.cnblogs.com/general10/p/5920646.html
Copyright © 2011-2022 走看看