• [1553] Beautiful Walls

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • To simplify the building process, XadillaX built some template on the ground. The template is a very big wall and the height of each unit may be different.

    8Mao and Hungar have to choose any part of this wall as their own wall.

    The part(i, j) means the wall between unit(i) and unit(j) with their heights.
    What Hungar thinks a beautiful wall is that the height of each unit is unique.
    Now give you a wall-template, you should tell Hungar that how many ways he can choose to copy his own wall?

  • 输入
  • This problem contains several cases, ends with EOF.
    The first line of each case is one integer N (0 < N ≤ 100000) which indicates the side length (number of units) of the wall-template.
    The second line contains N integers which indicate the height of each unit. (0 < height <= 100000)
  • 输出
  • For each case, you should output the number of ways that Hungar can choose.
  • 样例输入
  • 5
    3 4 5 5 2
    3
    1 2 3
  • 样例输出
  • 9
    6
  • 提示
  • 来源
  • cjl
  • 思路:尺取法,组合数学;
  • 用尺取法取区间,在这个区间内所有的数都不同,那么可行方案数为Cn2,两个区间还会相交,所以还得减去重复算的,比如1 2 3 4 5 3 2 1
  • 前一个区间为[1,5],后一个为[4,1];所以[4,5]相交,所以去重.那么关键是记录相交的地方,我们可以这样,记录上个区间的结束,然后根据尺取法可知道当前
  • 区间的开头,这样就可以算出了。复杂O(n);
  •  1 #include<stdio.h>
    2 #include<algorithm>
    3 #include<iostream>
    4 #include<string.h>
    5 #include<stdlib.h>
    6 #include<math.h>
    7 using namespace std;
    8 typedef long long LL;
    9 int uu[1000005];
    10 int flag[1000005];
    11 int yy[1000005];
    12 int main(void)
    13 { int i,j,k;
    14 while(scanf("%d",&k)!=EOF)
    15 { memset(flag,0,sizeof(flag));
    16 memset(yy,0,sizeof(yy));
    17 for(i=0;i<k;i++)
    18 {
    19 scanf("%d",&uu[i]);
    20 }
    21 LL ans=1;long long sum=0;int vv=0;
    22 int l=0;int r=0;flag[uu[0]]=1;int kp=0;
    23 while(l<=r+1&&r<k-1)
    24 {
    25 while(r<k-1)
    26 {
    27 r++;
    28 if(flag[uu[r]]==1)
    29 {LL yyk=0;
    30 if(ans>0&&!yy[r-1])
    31 {
    32 yy[r-1]=1;
    33 if(kp>l)
    34 {
    35 yyk=kp-l+1;
    36 }
    37 sum+=ans*(ans-1)/2;if(yyk>0)sum-=yyk*(yyk-1)/2;
    38 kp=r-1;
    39 }ans++;flag[uu[r]]++;break;
    40 }
    41 else if(!flag[uu[r]])
    42 {
    43 ans++;flag[uu[r]]++;
    44 }
    45 }
    46 if(r==k-1&&flag[uu[r]]==1)
    47 break;
    48 else {flag[uu[r]]--;flag[uu[l]]--;ans-=2;r--;l++;}
    49 }
    50 if(ans>0){sum+=ans*(ans-1)/2;sum+=(LL)k;LL yyk=kp-l+1;if(yyk>0){sum-=yyk*(yyk-1)/2;}}
    51 printf("%I64d\n",sum);
    52 }
    53 return 0;
    54 }

Beautiful Walls的更多相关文章

  1. HDU 6187 Destroy Walls

    Destroy Walls Long times ago, there are beautiful historic walls in the city. These walls divide the ...

  2. HDU 6187 Destroy Walls (思维,最大生成树)

    HDU 6187 Destroy Walls (思维,最大生成树) Destroy Walls *Time Limit: 8000/4000 MS (Java/Others) Memory Limit ...

  3. 使用Beautiful Soup编写一个爬虫 系列随笔汇总

    这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...

  4. 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(1): 基础知识Beautiful Soup

    开始学习网络数据挖掘方面的知识,首先从Beautiful Soup入手(Beautiful Soup是一个Python库,功能是从HTML和XML中解析数据),打算以三篇博文纪录学习Beautiful ...

  5. Python爬虫学习(11):Beautiful Soup的使用

    之前我们从网页中提取重要信息主要是通过自己编写正则表达式完成的,但是如果你觉得正则表达式很好写的话,那你估计不是地球人了,而且很容易出问题.下边要介绍的Beautiful Soup就可以帮你简化这些操 ...

  6. 推荐一些python Beautiful Soup学习网址

    前言:这几天忙着写分析报告,实在没精力去研究django,虽然抽时间去看了几遍中文文档,还是等实际实践后写几篇操作文章吧! 正文:以下是本人前段时间学习bs4库找的一些网址,在学习的可以参考下,有点多 ...

  7. 数位DP CF 55D Beautiful numbers

    题目链接 题意:定义"beautiful number"为一个数n能整除所有数位上非0的数字 分析:即n是数位所有数字的最小公倍数的倍数.LCM(1到9)=2520.n满足是252 ...

  8. 错误 You are trying to run the Python 2 version of Beautiful Soup under Python 3. This will not work

    Win  10    下python3.6 使用Beautiful Soup  4错误 You are trying to run the Python 2 version of Beautiful ...

  9. hihoCoder 1425 : What a Beautiful Lake(美丽滴湖)

    hihoCoder #1425 : What a Beautiful Lake(美丽滴湖) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 ...

随机推荐

  1. 安装octave详解

    1. 一些可以替换的库(可跳过) 默认的库安装libblas.dll.OpenBLAS-v2.6.0-0-54e7b37_dynamicarch_nt4(自动检测CPU类型) 在目录下<your ...

  2. 振鹏同学正式学习java的第一天!

    一.今日收获 1.最棒的莫过于运行Java的HelloWorld! 2.在同学的帮助下历经坎坷困苦安装完成了Eclipse软件并设置好环境变量. 3.最最最开始了解了Java的前世今生,编程语言发展的 ...

  3. 学习java 7.24

    学习内容: Swing编程 由于Swing的所有组件完全采用Java 实现,不再调用本地平台的GUl,所以导致Swing图形界面的显示速度要比AWT图形界面的显示速度慢一些,但相对于快速发展的硬件设施 ...

  4. absorb

    absorb 物理的absorb比较直观.被书本/知识absorb也好理解.涉及到money/time时有点抽象,但汉语也有"吸金"的说法,consume, use up.可以吸收 ...

  5. MyBatis 如何实现流式查询

    基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用. 如果没有流式查询,我们想要从数据库取 1000 万条记录而又没 ...

  6. 4.3 rust func closure

    fn add_one_v1 (x: u32) -> u32 { x + 1 } let add_one_v2 = |x: u32| -> u32 { x + 1 }; let add_on ...

  7. Spring的事务传播机制(通俗易懂)

    概述 Spring的事务传播机制有7种,在枚举Propagation中有定义. 1.REQUIRED PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就 ...

  8. DuiLib逆向分析の按钮事件定位

    目录 DuiLib逆向分析の按钮事件定位 0x00 前言 DuiLib介绍 DuiLib安装 DuiLib Hello,World! Duilib逆向分析之定位按钮事件 碎碎念 第一步:获取xml布局 ...

  9. 原来这才是 Socket !

    关于对 Socket 的认识,大致分为下面几个主题,Socket 是什么,Socket 是如何创建的,Socket 是如何连接并收发数据的,Socket 套接字的删除等. Socket 是什么以及创建 ...

  10. BUU PWN hitcontraining_bamboobox

    本来想学习house of force,结果没用就直接做出来了...我用了三种方法来做这道题. 1.fastbins attack 2.unlink 3.house of force 可以改写got表 ...