竞赛讨论区 > 佬们帮我看看关鸡 关一天了
头像
郑2005
发布于 02-04 16:02
+ 关注

佬们帮我看看关鸡 关一天了

#include<bits/stdc++.h>

using namespace std;

const int N=1e5+10;

typedef long long ll;

pair<int,int>pq[N];

int main()

{

int t,n;

cin>>t;

while(t--)

{

int re=0;

int z,zl,zr,left,right,L,R;

z=zl=zr=0;//标记鸡的周围三点是否有火

left=right=L=R=0;//是否左、右有火,是否左边堵上 0表示无

cin>>n;

for(int i=1;i<=n;i++) cin>>pq[i].second>>pq[i].first;

sort(pq+1,pq+n+1);

for(int i=1;i<=n;i++)//检测鸡的周围三个有没有火

if(pq[i].first==0) z=1;

else if(pq[i].first==-1&&pq[i].second==1) zl=1;

else if(pq[i].first==1&&pq[i].second==1) zr=1;

for(int i=1;i<=n;i++)//检测左边是否有火以及是否被火堵上

{

if(pq[i].first>=0) break;

left=1;

if((pq[i].first==pq[i+1].first&&i+1<=n)||(i+1<=n&&pq[i].first==pq[i+1].first-1&&pq[i].second!=pq[i+1].second)) {L=1;break;}

}

for(int i=n;i>=1;i--)

{

if(pq[i].first<=0) break;

right=1;

if((i-1>=1&&pq[i].first==pq[i-1].first)||(i-1>=1&&pq[i].first==pq[i-1].first+1&&pq[i].second!=pq[i-1].second)) {R=1;break;}

}

if(z)

{

if(!L) re++;

if(!R) re++;

}

else

{

if(!left) {re+=2;z=1;}

else if(left&&!L&&!zl) re++;

else if(left&&!L&&zl) {re++;z=1;}

if(!right)

{

if(z) re++;

else re+=2;

}

else

{

if(!R) re++;

if(zr&&z) re--;

}

}

printf("%d\n",re);

}

}

全部评论

(0) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐