1000 Tables Moving

1000 Problem A

The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure. 

题目概述:在400个两两相对的房间中,共用一条走廊的情况下,移动桌子,使得所花费的时间最少。

思路:因为只有一条走廊,实际上就是两个相对的的房间对应与一个走廊的位置,在移动桌子的过程中,不重复使用的走廊,可以在同一时间内同时移动,而重复的情况下,必须等待,如果把走廊编号为200,定义一个走廊数组,移动桌子的过程中,每经过一处走廊,则数组的特定值加一,最后比较出走廊数组中的最大值,即为要经过走廊最多的次数。

感想:在解决问题的过程中,一直只想从房间的编号入手,最终在样例通过的情况下,却迟迟无法ac,最后又回过头来,仔细的看了题目给出的示意图,才明白,题目真正的要求,其实并不在房间,而是需要走廊的次数。汗~考虑问题太过肤浅,深入思考才是硬道理!

最后附上ac代码:

#include<iostream>

#include <stdio.h>

#include<string.h>

#include <algorithm>

using namespace std;

int main(){

    intT,n,i,j,s,e;

    int a[201];

   cin>>T;

    while(T--){

       memset(a,0,sizeof(a));

       cin>>n;

        intk,m=0;

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

           cin>>s>>e;

           if(s>e)

           swap(s,e);

           for(j=(s+1)/2;j<=(e+1)/2;++j) //在之前错误的程序中,忘了加等号

               a[j]++;

        }

       for(k=0;k<201;k++){

           if(a[k]>m)

               m=a[k];

        }

           cout<<m*10<<endl;

    }

}

你可能感兴趣的:(1000 Tables Moving)