zoj 3581 A Simple Test 模拟题

模拟题,很暴力的水过,不过可以用并查集优化 

注意两个重点是可以的

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int N = 500;
int ar[N][N];
struct Point{
    int x,y;
}a,b,ra,rb;
bool ok(Point a,Point b){
    if(a.x==b.x) {
        for(int i=min(a.y,b.y);i<=max(a.y,b.y);i++)
            if(ar[a.x][i]) return 0;
    }else if(a.y==b.y){
        for(int i=min(a.x,b.x);i<=max(a.x,b.x);i++)
            if(ar[i][a.y]) return 0;
    }
    return 1;
}
int main(){
    int n,m; 
    while(scanf("%d%d",&n,&m)!=EOF){
        memset(ar,0,sizeof(ar));
        int num;
        scanf("%d",&num);
        while(num--){
            scanf("%d%d",&a.x,&a.y);
            ar[a.x][a.y]=1;
        }
        int Q,ans=60;
        scanf("%d",&Q);

        //for(int i=0;i<n;i++){
        //    for(int j=0;j<m;j++)
        //        cout<<ar[i][j]<<" ";
        //    cout<<endl;
        //}

        while(Q--){
            scanf("%d%d%d%d",&a.x,&a.y,&b.x,&b.y);
            if(a.x<0||a.y<0||b.x<0||b.y<0
                || a.x>=n||a.y>=m||b.x>=n||b.y>=m
                ||!ar[a.x][a.y]||!ar[b.x][b.y])
                ans--;
            else{
                ar[a.x][a.y]=0; ar[b.x][b.y]=0;
                int flag=0;
                for(int i=0;i<n;i++){
                    ra.x=i; ra.y=a.y;
                    rb.x=i; rb.y=b.y;
                    if(ok(ra,rb)&&ok(a,ra)&&ok(rb,b)){
                        flag=1;
                    }
                }
                for(int i=0;i<m;i++){
                    ra.x=a.x; ra.y=i;
                    rb.x=b.x; rb.y=i;
                    if(ok(ra,rb)&&ok(a,ra)&&ok(rb,b)){
                        flag=1;
                    }
                }
                if(flag==1) {
                    ans+=2;
                }
                else {
                    ans--;
                    ar[a.x][a.y]=1; ar[b.x][b.y]=1;
                }
            }
            printf("%d\n",ans);
        }    
    }
}
posted @ 2012-05-12 13:29  HaoHua_Lee  阅读(181)  评论(0编辑  收藏  举报