ZOJ-1029-Moving Tables

本文介绍了一种使用贪心算法解决走廊人流管理问题的方法。通过将房间号转化为段数并利用map数组记录每段走廊的使用次数,最终找出走廊中最繁忙的部分。文章还讨论了特殊情况下的代码调整。

这道题算法分类为贪心 。

不过也要看怎么做了,400个房间面对面,走廊分为200个段,用map[]表示,把输入的房间房间号做一个(x+1)/2的转换,便是它占用的段数,不过记得整个算式是针对int变量的。接着就把输入的两个房间段之间的map[]值全部加1,最后数一下最大数字就OK了,输出时乘个10。

程序很简单,几分钟就写好,可是WA了两次又让我郁闷要死,怎么想方法都应该没错啊,后来只好在ZOJ的论坛上搜索,意外得发现一组测试数据:

3
100 10
80 60
30 50

一看见就想骂人。。。题目中给了那么多数据全部都是先小后大的。。。于是加了几行代码,要是先大后小就交换一下。。。然后就AC了。。。ft!

还有就是AC以后我又试了一下,如果不把房间号转成段数而直接用的话,会WA的。

TIME:       00:00.01

MEMORY:832K

#include <iostream>
using namespace std;

#define MAXN 201
int map[MAXN];

void solve()
{
    
int i,n,start,end,m;

    
for(i=0;i<MAXN;i++)//初始化
        map[i] = 0;

    cin 
>> n;
    
while(n--)
    
{
        cin 
>> start;
        cin 
>> end;
        
if(start > end)
        
{
            
int temp = start;
            start 
= end;
            end 
= temp;
        }

        
for(i=(start+1)/2;i<=(end+1)/2;i++)
            map[i] 
+= 1;
    }


    m 
= map[1];
    
for(i=2;i<MAXN;i++)
    
{
        
if(map[i]>m)
            m 
= map[i];
    }

    cout 
<< m*10 << endl;
}


int main()
{
    
int t;
    cin 
>> t;
    
while(t--)
        solve();
    
return 0;
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值