HDU 4584 Building bridges

题意:

思路:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<stdlib.h>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
const int MAXN=2000+5;
const int MAX=50+5;
const int INF=0x3f3f3f3f;
char str[MAX][MAX];
struct node
{
    int x,y;
}H[MAXN],C[MAXN];

int dis(node A,node B)
{
    return abs(A.x-B.x)+abs(A.y-B.y);
}
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m) && (n||m))
    {
        for(int i=0;i<n;i++) scanf("%s",str[i]);
        int a=0,b=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                node temp;
                if(str[i][j] == ‘H‘)
                {
                    temp.x=i;
                    temp.y=j;
                    H[a++]=temp;
                }
                if(str[i][j] == ‘C‘)
                {
                    temp.x=i;
                    temp.y=j;
                    C[b++]=temp;
                }
            }
        }

        int id1=0,id2=0;
        int minn=INF;
        for(int i=0;i<a;i++)
        {
            for(int j=0;j<b;j++)
            {
                if(dis(H[i],C[j])<minn)
                {
                    minn=dis(H[i],C[j]);
                    id1=i;
                    id2=j;
                }
            }
        }
        printf("%d %d %d %d\n",H[id1].x,H[id1].y,C[id2].x,C[id2].y);
    }
    return 0;
}
时间: 2024-11-06 17:35:01

HDU 4584 Building bridges的相关文章

hdu 6024 Building Shops(dp)

题目链接:hdu 6024 Building Shops 题意: 要在n个点上建若干小卖店,每个点建造小卖店的消费为cost[i],如果这个点没有建造小卖店,那么这个点的费用为和左边最近的点的坐标差. 求总的最小费用. 题解: 首先,第一个点必须建造,然后对于第i个点: dp[i]=min(dp[i],sum[i]-sum[j]-(i-j)*(id[i]-id[j]+dp[j-1]+cost[j]);(1<=j<=i) 其中: id[i]表示第i个点的坐标. sum[i]=id[i]-id[1

HDU 5033 Building(北京网络赛B题)

HDU 5033 Building 题目链接 思路:利用单调栈维护建筑建的斜线,保持斜率单调性,然后可以把查询当成高度为0的建筑,和建筑和在一起考虑,从左往右和从右往左各扫一遍即可 代码: #include <cstdio> #include <cstring> #include <queue> #include <cmath> #include <algorithm> using namespace std; const int N = 200

hdu 5033 Building(单调性+二分)

题目链接:hdu 5033 Building 题目大意:城市里有n座摩天大厦,给定每栋大厦的位置和高度,假定大厦的宽度为0.现在有q次查询,表示人站的位置,人的高度视为0,问说可以仰望天空的角度. 解题思路:比赛的时候用单调性优化直接给过了,对于每个大厦来说,记录左右两边与其形成斜率最大的大厦序号以及斜率,然后每次查询是,通过二分确认人所在位置属于哪两栋大厦之间,然后分别向左向右确认角度,在确认角度时,根据大厦记录的最大斜率进行判断. 以左边为例, 然后对于查询位置x: 这种解法仅仅是优化查询效

hdu Caocao&#39;s Bridges(无向图边双连通分量,找出权值最小的桥)

1 /* 2 题意:给出一个无向图,去掉一条权值最小边,使这个无向图不再连同! 3 4 tm太坑了... 5 1,如果这个无向图开始就是一个非连通图,直接输出0 6 2,重边(两个节点存在多条边, 权值不一样) 7 3,如果找到了桥的最小权值为0,也就是桥上的士兵数为0,那么还是要最少派一个 8 士兵过去炸掉桥! 9 10 思路:假设每两个节点最多只有一条边进行相连! 11 进行tarjan算法,如果该算法调用了超过2次,说明这个原图就是不连通的! 12 否则在tarjan算法中将桥存起来!然后

hdu 2818 Building Block(带权并查集)

题目: 链接:点击打开链接 题意: 有N个积木,1到N编号.进行一些操作P次,M:X Y把X积木放到Y的上面,如果X和Y相等请忽略.C:X 计算X积木下的积木数目. 思路: 带权并查集的题目,定义数组sum[i]表示i积木下面积木的数目.遇到操作M,就把X和Y合并到同一个集合中.我们视每个结点为1个 Pile,其中rank[i]就表示每个Pile处的积木的个数,Initially, there are N piles, and each pile contains one block.所以,ra

HDU 5033 Building

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5033 解题报告:在一条x轴上有n个建筑物,每个建筑物有一个高度h,然后现在有q次查询,查询的内容是假设有一个人站在xi这个位置,问他看天空的视角是多大,用角度表示. 数据量都比较大,n和q都是10^5,但因为q次都是查询操作,并没有要求在线更新和查询,所以我们想到用离线算法,先把全部的输入接收,然后离线算出最后打出结果. 这题的思路是把所有的建筑物按照高度从大到小排序,然后所有的查询按照x从小到大排

hdu 5033 Building(斜率优化)

Building Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1237    Accepted Submission(s): 350 Special Judge Problem Description Once upon a time Matt went to a small town. The town was so sma

BC#34 1002 hdu 5192 Building Blocks

Building Blocks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 60    Accepted Submission(s): 6 Problem Description After enjoying the movie,LeLe went home alone. LeLe decided to build blocks.

hdu 1815 Building roads

Building roads Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 822    Accepted Submission(s): 239 Problem Description Farmer John's farm has N barns, and there are some cows that live in each b