POJ1083 Moving Tables

来源:互联网 发布:白金数据 原著 编辑:程序博客网 时间:2024/05/01 08:36

题目大意:走廊中搬桌子,走廊的宽度只允许一张桌子通过,但允许路线不交叉的同时搬桌子,每次搬桌子都需要10分钟,问所需最短时间。


解题思路:统计搬桌子过程中经过每个房间的最大次数,即可求出最短时间。

          根据房间号排列规则,奇数号\2+1;偶数号\2


#include <iostream>#include <cstdio>#include <algorithm>#include <cstring> using namespace std; #define MAXN 1010 int T;int n;int cnt[MAXN];int maxcnt; void Update(int l,int r){    for(int i=l;i<=r;i++)    {        cnt[i]++;        maxcnt=max(maxcnt,cnt[i]);    }} int main(){    scanf("%d",&T);     while(T--)    {        scanf("%d",&n);         maxcnt=0;        memset(cnt,0,sizeof(cnt));         for(int i=0;i<n;i++)        {            int a,b;             scanf("%d%d",&a,&b);            if(a&1) a=a/2+1;            else a/=2;            if(b&1) b=b/2+1;            else b/=2;            if(a>b) swap(a,b);            Update(a,b);        }         printf("%d\n",maxcnt*10);    }     return 0;}


c语言中,变量a&1即做二进制的且运算,二进制表示的a末位为1则返回1;反之返回0;

可理解为判断奇偶,效率比a%2高

0 0
原创粉丝点击