zoukankan      html  css  js  c++  java
  • SSLZYC 2124 涂色

    题目大意:
    有一根长度为1000000000的棍子,一开始涂成白色,棍子上有刻度,左端点为0,右端点1000000000。重新涂的颜色可能是黑色或着白色,棍子总共被依次重新涂了N次。找出最后最长的白色段。


    思路:

    离散化

    比较“模版”的一道题然而我还是改了半天

    记录下每一次的左端点和右端点,排序,之后找出最长线段就行啦!


    代码:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int color[5001],x[5001],y[5001],a[20001],n,m,sum,l,r,L,R;
    char c;
    
    int main()
    {
        scanf("%d",&n);
        y[0]=1e9;  //初始化
        for (int i=1;i<=n;i++)
        {
            scanf("%d%d",&x[i],&y[i]);
            cin>>c;
            if (c=='b') color[i]=1;  //记录颜色
            a[++m]=x[i];
            a[++m]=y[i];  //记录点
        }
        sort(a+1,a+1+m);
        for (int i=1;i<=m;i++)
         for (int j=n;j>=0;j--)  
          if (a[i-1]>=x[j]&&a[i]<=y[j])
          {
             if (color[j])  //如果是白色
             {
                if (r-l>R-L)   //如果记录点比答案大
                {
                    R=r;
                    L=l;  //更改答案
                }
                l=a[i];
                r=a[i+1];  //记录
             }
             if(a[i-1]<=r) r=a[i];
             break;
          }
        if (r-l>R-L)   //最后再记录一次(保险)
        {
            R=r;
            L=l;
        }
        printf("%d %d\n",L,R);
        return 0;
    }
  • 相关阅读:
    开博说两句
    学习总结 (持续更新)
    ip代理 120203
    [vs2005]关于预编绎网站的问题[已预编译此应用程序的错误]
    JAVA类基础
    集合类和泛型
    IO流——字符流
    多线程和包
    多态和内部类
    抽象类与接口
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313078.html
Copyright © 2011-2022 走看看