zoukankan      html  css  js  c++  java
  • 鸿山洞的灯

    题目描述

    已知n盏灯以及每盏灯的位置p[i],p[i]均不相等,两盏相邻的灯当小于dist时,若这个安全距离里面还有灯是亮着时,就可以关掉该盏灯,(即若第i-1盏与第i+1盏的距离<=dist,则可以关掉第i盏)求在保证洞里的光线是充足的情况下,一段区域里能删除的灯的最大值。

    距离洞口最近和最远的两盏灯必须是亮着

    输入输出格式

    输入格式:

    第一行两个数,n和dist

    第二行n个数,即每盏灯的位置

    输出格式:

    一个数,即一段区域里能删除的灯的最大值。

    思路:此题可当成模拟算法来做,但这里我用的是暴力算法,直接枚举相邻的灯,分两种情况:

    1.满足题意"两盏相邻的灯当小于dist时",用if判断"若第i-1盏与第i+1盏的距离<=dist,则可以关掉第i盏"

    2.若不满足题意,直接与后面的灯比较,"若第i-1盏与第i+1盏的距离<=dist,则可以关掉第i盏"

    代码如下(有注释):

    #include <bits/stdc++.h>//万能头文件
    using namespace std;
    int p[100001],n,dist,ans;
    int main(){
        cin>>n>>dist;//输入
        for(int i=0;i<n;i++)
            cin>>p[i];
        sort(p,p+n);//排序
        for(int i=1;i<n-1;i++)
            if(p[i-1]!=0&&p[i+1]-p[i-1]<=dist){//按题意判断“即若第i-1盏与第i+1盏的距离<=dist,则可以关掉第i盏 ”
              p[i]=0;//此时灯删掉
              ans++;//能山灯的数量加一
            }
            else{//如果非题意条件
                int j=i-1;
                while(p[j]==0)
                  j--;
                if(p[i+1]-p[j]<=dist){//两盏相邻的灯当小于dist时
                   p[i]=0;//此时灯删掉
                   ans++;//能山灯的数量加一
                }
            }
        cout<<ans;//输出最终答案
        return 0;//完美结束程序
    }

  • 相关阅读:
    spring mvc velocity多视图
    ubuntu 的远程桌面
    nhibernate 3.3 linq扩展
    MongoDB资料汇总专题[转发]
    SQLServer 2008 删除、压缩日志
    VS2012和2010 设置framework版本
    引用的程序集 没有强名称
    Xamarin for OSX – SetUp
    Xamarin devexpress datagrid 样式
    Xamarin devexpress Grid
  • 原文地址:https://www.cnblogs.com/jr-ag/p/9021600.html
Copyright © 2011-2022 走看看