ZOJ1029

贪心,考虑连廊的特殊性即可过了

 

#include <iostream>
#include 
<cstdlib>
using namespace  std;

const int MAX_SIZE = 202
;

typedef 
struct

ExpandedBlockStart.gifContractedBlock.gif
{
    
int
 s,t;
    
bool mark;//标记是否已移动

}
Node;

Node table[MAX_SIZE];
int
 T,n;

int cmp(const void *a, const void *
b)
ExpandedBlockStart.gifContractedBlock.gif
{//以s为主关键字,t为次关键字升序排列
    Node *p,*q;
    p 
= (Node *
)a;
    q 
= (Node *
)b;
    
if(p->!= q->
s)
        
return p->> q->
s;
    
else

        
return p->> q->t;
}


void  Solve()
ExpandedBlockStart.gifContractedBlock.gif
{
    
int
 t1,t2;
    
int i,j,k,cnt = 0
;
    
int ttime = 0
;
    
for(i = 0; i < n; i++
)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{//输入
        cin>>t1>>t2;
        
if(t1 <
 t2)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{table[i].s = t1;table[i].t = t2;}

        
else
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{table[i].s = t2;table[i].t = t1;}
        table[i].mark 
= false;//未移动
    }

    qsort(table,n,
sizeof(Node),cmp);
    
for(i = 0; i < n; i++
)
        
if(table[i].mark == false
)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            table[i].mark 
= true;//当然这里标记是毫无意义的

            cnt++;
            k 
= i;j = i + 1
;
            
for(;j < n; j++
)
                
if(table[j].mark == false
)
                
if( table[k].t <
 table[j].s)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    
if(table[k].t % 2
)
                        
if(table[j].s == table[k].t +1)continue
;
                    
//
有走廊的特殊性必须得考虑这种情况
                    
//就像(2,3) and (4,5)是不能同时进行的

                    table[j].mark = true;
                    k 
=
 j;
                    cnt
++
;
                    
if(cnt == n)break
;
                }

            ttime
++;
            
if(cnt == n)break
;
        }

    cout
<<ttime*10<<endl;
}


int  main()
ExpandedBlockStart.gifContractedBlock.gif
{
    
while(cin>>
T)
        
while(T--&&cin>>
n)
            Solve();
    
return 0
;
}

转载于:https://www.cnblogs.com/Xredman/archive/2009/03/04/1403197.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值