zoukankan      html  css  js  c++  java
  • ybt1107题解和方法总结

    今天花了三个小时的时间刷了些基础题,虽说是简单题,但是有一些还是有点难度的

    比如ybt1107,我死嗑了半个小时。

    【题目描述】

    某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。

    由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

    【输入】

    第一行有两个整数L(1 ≤ L ≤ 10000)和 M(1 ≤ M ≤ 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

    对于20%的数据,区域之间没有重合的部分;对于其它的数据,区域之间有重合的情况。

    一开始我一直把几段地铁当成几个整体来看(就是一段一段),后来发现这样不好算重合数量,然后大改程序(我太难了)

    改成计算地铁掠过树木的数量,把一段一段的路抽象化成几个数才弄出来。

    以下是代码

    #include<iostream>
    using namespace std;
    int main()
    {
    int L,M,i,j;
    int p[10001]= {0};//给所有数赋初值,假设没被移走的都是0
    int a,b,x=0,y,z;

    cin>>L>>M;//输入L、M的值

    for (i=0; i<M; i++)//有几个路段就输入几次
    {
    cin>>a>>b;
    for(j=a; j<=b; j++)
    p[j]={1};//在a到b这段路上的树木被移走了,重新赋值为1。这样就不用计算重合的情况,因为1赋值1还是1(我真聪明)
    }

    for(i=0; i<=L; i++) 
    {

    if(p[i]==1)
    x++;//计算被移走的树木之和
    }
    y=L+1;//街上一开始有多少树
    z=y-x;//施工完还剩多少树

    cout<<z<<endl;

    return 0;
    }

    这道题看似不难,但是我一开始想错了,就花费了大量时间,所以一定要想好了再动手编代码,避免翻工。

    除了做了点小题之外,今天还学了点线性代数(成功懵逼俩小时)就不说了,我怕说错。

  • 相关阅读:
    Hanlp(汉语言处理包)配置、使用、官方文档
    Mysql 在DOS窗口下的操作
    漂亮的省级下拉选择
    数组的应用排序
    设置外部样式坐标的位置
    动态设置Div坐标
    对联广告
    树形菜单
    隐藏图和图框架
    使用clssneme改变图片或样式
  • 原文地址:https://www.cnblogs.com/zaza-zt/p/12249792.html
Copyright © 2011-2022 走看看