• 【题解】Luogu p2285 BZOJ1207 [HNOI2004]打鼹鼠


    题目描述

    鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的。根据这个特点阿牛编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气。你可以控制一个机器人来打鼹鼠,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的话,那么这个鼹鼠就会被机器人打死。而机器人每一时刻只能够移动一格或停留在原地不动。机器人的移动是指从当前所处的网格移向相邻的网格,即从坐标为(i,j)的网格移向(i-1, j),(i+1, j),(i,j-1),(i,j+1)四个网格,机器人不能走出整个n*n的网格。游戏开始时,你可以自由选定机器人的初始位置。

    现在知道在一段时间内,鼹鼠出现的时间和地点,请编写一个程序使机器人在这一段时间内打死尽可能多的鼹鼠。

    输入输出格式

    输入格式:

    从文件input.txt中读入数据,文件第一行为n(n<=1000), m(m<=10000),其中m表示在这一段时间内出现的鼹鼠的个数,接下来的m行中每行有三个数据time,x,y表示有一只鼹鼠在游戏开始后time个时刻,在第x行第y个网格里出现了一只鼹鼠。Time按递增的顺序给出。注意同一时刻可能出现多只鼹鼠,但同一时刻同一地点只可能出现一只鼹鼠。

    输出格式:

    输出文件output.txt中仅包含一个正整数,表示被打死鼹鼠的最大数目。

    输入输出样例

    输入样例#1: 复制

    2 2             
    1 1 1        
    2 2 2
    

    输出样例#1: 复制

    1
    

    思路

    机器人要打到鼹鼠要满足条件
    $$time[i]-time[j]>abs(x[i]-x[j])+abs(y[i]-y[j])$$
    即鼹鼠出现的时间间隔要大于机器人移动所需时间

    代码

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<string>
     4 #include<cstring>
     5 #include<iostream>
     6 #include<algorithm>
     7 #define re register int
     8 using namespace std;
     9 inline int read(){
    10     int x=0,w=1;
    11     char ch=getchar();
    12     while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    13     if(ch=='-') w=-1,ch=getchar();
    14     while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-48,ch=getchar();
    15     return x*w;
    16 }
    17 int N,M,f[10010],ans=0;
    18 struct data {
    19     int x,y,t;
    20 }d[10010];
    21 
    22 inline int dis(int i,int j) {
    23     return abs(d[i].x-d[j].x)+abs(d[i].y-d[j].y);
    24 }
    25 int main() {
    26     N=read(),M=read();
    27     re i;
    28     for(i=1;i<=M;++i) {d[i].t=read();d[i].x=read();d[i].y=read();}
    29     for(i=1;i<=M;++i) f[i]=1;
    30     for(i=1;i<=M;++i) {
    31         for(re j=1;j<i;++j)
    32             if(f[j]>=0&&d[i].t-d[j].t>=dis(i,j))
    33                 f[i]=max(f[i],f[j]+1);
    34         ans=max(ans,f[i]);
    35     }
    36     printf("%d
    ",ans);
    37     return 0;
    38 }
  • 相关阅读:
    基于网络监听方式的电子邮件实现基础
    在一个存储过程里面执行另一个存储过程的应用
    Vim复制单个字符
    Linux下fsck修复文件系统
    (转载)2011年金山软件C++开发工程师笔试题 关于逆序输出
    (转载)C++ string详解
    (转载)Linux下网络API
    (转载)软中断和硬中断
    (转载)找工作经历总结百度offer
    (转载)Vim入门图解说明
  • 原文地址:https://www.cnblogs.com/bbqub/p/8496994.html
Copyright © 2020-2023  润新知