HDUOJ 4584 2013杭州招待試合再現Building bridges


トランスファゲート
自分で見る.
構想:問題を理解すれば君はできるが,爆発的にやるだけだ.
今回の一番水の問題は、水が家に着いた.
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct  node
{
    int x,y;
} h[1600],c[1600];
int hnum,cnum,m,n;
int hx,hy,cx,cy,l;
char a[50];
int dis(int i,int j)
{
    int xl=(h[i].x-c[j].x>0)?h[i].x-c[j].x:c[j].x-h[i].x;
    int yl=(h[i].y-c[j].y>0)?h[i].y-c[j].y:c[j].y-h[i].y;
    return xl+yl;
}
int main()
{
    while(scanf("%d%d",&m,&n))
    {
        if(m==0&&n==0)return 0;
        hnum=0;
        cnum=0;
        for(int i=0; i<m; i++)
        {
            scanf("%s",a);
            for(int j=0; j<n; j++)
            {
                if(a[j]=='H')
                {
                    h[hnum].x=i;
                    h[hnum].y=j;
                    hnum++;
                }
                else if(a[j]=='C')
                {
                    c[cnum].x=i;
                    c[cnum].y=j;
                    cnum++;
                }
            }
        }
        cx=cy=hx=hy=50;
        l=1000000;
        for(int i=0; i<hnum; i++)
        {
            for(int j=0; j<cnum; j++)
            {
                int d=dis(i,j);
                if(dis(i,j)<l)
                {
                    l=d;
                    hx=h[i].x;
                    hy=h[i].y;
                    cx=c[j].x;
                    cy=c[j].y;
                }
                else if(d==l)
                {
                    if(hx>h[i].x)
                    {
                        l=d;
                        hx=h[i].x;
                        hy=h[i].y;
                        cx=c[j].x;
                        cy=c[j].y;
                    }
                    else if(hx==h[i].x)
                    {
                        if(hy>h[i].y)
                        {
                            l=d;
                            hx=h[i].x;
                            hy=h[i].y;
                            cx=c[j].x;
                            cy=c[j].y;
                        }
                        else if(hy==h[i].y)
                        {
                            if(c[j].x<cx)
                            {
                                l=d;
                                hx=h[i].x;
                                hy=h[i].y;
                                cx=c[j].x;
                                cy=c[j].y;
                            }
                            else if(cx==c[j].x)
                            {
                                if(cy>c[j].y)
                                {
                                    l=d;
                                    hx=h[i].x;
                                    hy=h[i].y;
                                    cx=c[j].x;
                                    cy=c[j].y;
                                }
                            }
                        }
                    }
                }
            }
        }
        cout<<hx<<" "<<hy<<" "<<cx<<" "<<cy<<endl;
    }
    return 0;
}