zoukankan      html  css  js  c++  java
  • P2070 刷墙 (洛谷)

    题目描述

    Farmer John已经设计了一种方法来装饰谷仓旁边的长栅栏(把栅栏认为是一根一维的线)。他把一只画刷绑在他最喜爱的奶牛Bessie身上,之后就去喝一杯冰水,而Bessie隔着栅栏来回走,当她走过某个地方,这里的一段栅栏就被刷上了涂料。

    Bessie从栅栏上的位置0开始,并且遵循着一个N次移动的次序(1 <= N <= 100,000)。例如“10 L”表示Bessie向左移动了10个单位长度,“15 R”表示Bessie向右移动了15个单位长度。现给出Bessie所有移动的列表,Farmer John想要知道哪些区域的栅栏至少涂了两层涂料(只涂一层涂料的区域可能在大雨中被洗掉)。Bessie在她的行走中最远到达距起始点1,000,000,000个单位长度。

    输入格式

    第1行:一个整型数N。

    第2..N+1行:每行描述了Bessie的N次移动中的一次,例如“15 L”。

    输出格式

    1行:被至少涂了两层涂料的区域总数。

    输入输出样例

    输入 #1
    6
    2 R
    6 L
    1 R
    8 L
    1 R
    2 R
    输出 #1
    6

    说明/提示

    【样例解释】

    Bessie从位置0开始,向右移动2个单位长度,向左移动6个单位长度,向右移动1个单位长度,向左移动8个单位长度,最后向右移动3个单位长度。

    6个单位区域至少被涂了两层涂料,是 [-11,-8], [-4,-3], [0,2]这些区域。

    这个题n的范围已经打消了我们模拟的念头,稳地超时。我们就要想一些奇怪的方法去解决这道题。哎,这道题是区间+1,好像在哪里见过,没错是差分。我们只需要把他的开头和结尾处记下来,然后开头+1,结尾-1就好了。然后我们按照位置排序,把层数加上,超过2层就加上面积。

    和谐的代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<cmath>
    #include<cstring>
    using namespace std;
    struct hehe
    {
    	int x,s;
    }sz[200005];
    long long n,a,wz,shu,zshu;
    char b;
    int px(struct hehe a1,struct hehe a2)
    {
    	return a1.x<a2.x;//按位置排序
    }
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a>>b;
    		if(b=='L')//向左移动。
    		{
    			sz[i*2-1].x=wz-a;//开头+1
    			sz[i*2-1].s=1;
    			sz[i*2].x=wz;//结尾-1
    			sz[i*2].s=-1;
    			wz-=a;
    		}else
    		{
    			sz[i*2-1].x=wz;//开头+1
    			sz[i*2-1].s=1;
    			sz[i*2].x=wz+a;//结尾-1
    			sz[i*2].s=-1;
    			wz+=a;
    		}
    	}
    	sort(sz+1,sz+n*2+1,px);//排序
    	for(int i=1;i<=n*2+1;i++)
    	{
    		shu+=sz[i].s;
    		if(shu>=2)//如果大于2,在进行下一次操作之前,一定是大于2层的。相减。
    		{
    			zshu+=sz[i+1].x-sz[i].x;
    		}
    	}
    	cout<<zshu<<endl;
    	return 0;
    }
    

    感觉这个题有然恶意评分了,难度和等级不太匹配。

    结尾的话是把全部的位置都平移了一下。对应这个奇怪的操作。

  • 相关阅读:
    Rational工具介绍(转)
    MySQL表的存储引擎
    2009 年度最佳 jQuery 插件
    09年关门歇业的15大网站 雅虎旗下4网站上榜
    [转载]windows2003上IIS+PyISAPIe1.1..0部署成功
    安装IronPythonStudio出错:已解决
    C# 开源项目
    Cassandra在windows平台下安装布署,对No SQL感兴趣的朋友可以进来看看
    【转载】开发人员用的一些好网站
    [转载]用来武装Firebug的十三款Firefox插件
  • 原文地址:https://www.cnblogs.com/lichangjian/p/12455259.html
Copyright © 2011-2022 走看看