欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HDU 1050

程序员文章站 2024-03-17 08:43:28
...

HDU 1050
HDU 1050

解题思路

根据题目中的描述 ,当我们移动多个桌子时,若两次移动的开始房间号和结束房间号没有重合处,即可以同时移动。若有一段走廊有m个桌子都要经过,一次只能经过一个桌子,则需要m*10的时间移动桌子。

所以我们可以设一个数组,下标值即为房间号。桌子经过房间时,该房间号为下标对应的数组值即加10。最后找到最大的数组值,即为移动完桌子需要的最短时间。

想法:
1. 若出发的房间号小于到达的房间号,我们就正常移动,否则需要交换一下,也看成是从房间号小的房间移动到大的房间;
2. 出发房间为偶数则减一,结束房间为奇数则加一
HDU 1050

AC代码

#include <iostream>
    #include <algorithm>
    #include <stdlib.h>
    #include <string.h>

    using namespace std;

    int main(){
        int T,N;
        int s_r,e_r;
        cin>>T;
        while(T--){
            int c[1000];
            memset(c,0,sizeof(c));
            cin>>N;
            while(N--){
                cin>>s_r>>e_r;
                if(s_r>e_r)
                    swap(s_r,e_r);
                if(s_r%2==0)
                    s_r-=1;
                if(e_r%2==1)
                    e_r+=1;
                for(int i=s_r;i<e_r;i++){
                    c[i]+=10;
                }
            }
            cout<<*std::max_element(c,c+1000)<<endl;
        }
        return 0;
    }
    /*
    3
    4
    10 20
    30 40
    50 60
    70 80
    2
    1 3
    2 200
    3
    10 100
    20 80
    30 50

    Sample Output
    10
    20
    30
    */

运行结果:
HDU 1050
代码中用道德两个C++的内置函数
SWAP
max_element