• [匈牙利] 洛谷 P2526 小狗散步


    题目背景

    Grant喜欢带着他的小狗Pandog散步。Grant以一定的速度沿着固定路线走,该路线可能自交。Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇。小狗和主人同时从(X1,Y1)点出发,并同时在(Xn,Yn)点汇合。小狗的速度最快是Grant的两倍。当主人从一个点以直线走向另一个点时,Pandog跑向一个它感兴趣的景点。Pandog每次与主人相遇之前最多只去一个景点。

    题目描述

    你现在的任务是:为Pandog寻找一条路线(有可能与主人的路线部分相同),使它能够游览最多的景点,并能够准时与主人在给定地点相遇或者汇合。

    输入输出格式

    输入格式:

    输入文件第一行是两个整数N和M( 1≤N,M≤100 );

    输入文件第二行的N个坐标给出了Grant的散步路线,即Pandog和主人相遇地点;

    输入文件第三行的M个坐标给出了所有Pandog感兴趣的景点。

    所有输入的坐标均不相同,且绝对值不超过1000。

    输出格式:

    输出小狗的移动路线。

    第一行是经过的点数,第二行依次为经过的点的坐标(直角坐标系)

    输入输出样例

    输入样例#1:
    4 5
    1 4 5 7 5 2 -2 4
    -4 -2 3 9 1 2 -1 3 8 -3
    
    输出样例#1:
    6
    1 4 3 9 5 7 5 2 1 2 -2 4

    题解

    • 可以发现,主人的路线是一定的,我们可以预处理出当前主人在x,小狗可以浏览的景点个数,存在一个数组里
    • 因为我们要求的是小狗最多浏览的景点数,那么显然可以最大匹配
    • 然后就没了

    代码

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cmath>
     5 #define N 110
     6 #define sqr(x) (x)*(x)
     7 using namespace std;
     8 struct edge {int x,y;}a[N],b[N];
     9 int n,m,map[N][N],vis[N],p[N],ans=0;
    10 double calc(edge x,edge y) { return sqrt(sqr(x.x-y.x)+sqr(x.y-y.y)); }
    11 int xyl(int x)
    12 {
    13     for (int i=1;i<n;i++)
    14         if (map[x][i]&&!vis[i])
    15         {
    16             vis[i]=1;
    17             if (!p[i]||xyl(p[i])) { p[i]=x; return 1; }
    18         }
    19     return 0;
    20 }
    21 int main()
    22 {
    23     scanf("%d%d",&n,&m);
    24     for (int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
    25     for (int i=1;i<=m;i++) scanf("%d%d",&b[i].x,&b[i].y);
    26     for (int i=1;i<=n;i++)
    27         for (int j=1;j<=m;j++)
    28             if (calc(a[i],a[i+1])*2>calc(a[i],b[j])+calc(b[j],a[i+1]))
    29                 map[j][i]=1;
    30     for (int i=1;i<=m;i++) memset(vis,0,sizeof(vis)),ans+=xyl(i);
    31     printf("%d
    ",ans+n);
    32     for (int i=1;i<=n;i++)
    33     {
    34         printf("%d %d ",a[i].x,a[i].y);
    35         if (i<n&&p[i])  printf("%d %d ",b[p[i]].x,b[p[i]].y);
    36     }
    37 }
  • 相关阅读:
    A JavaScript Tree component which implements the J.Q.Walker II layout algorithm
    决策树Ecotree(转)
    Elasticsearch中关于transform的一个问题分析
    转发sqlserver http://www.cnblogs.com/jiazengtao/archive/2013/05/29/3102803.html
    时间GMT
    C#去掉json字符串中的换行符
    收藏的好的Jquery+css3
    存储过程中日期的转换
    关于头文件
    关于头文件
  • 原文地址:https://www.cnblogs.com/Comfortable/p/10296289.html
Copyright © 2020-2023  润新知