欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

对本期集训的回顾(一)

程序员文章站 2022-06-05 09:26:24
...

          啦啦啦,小火山这个暑假竟然只放了4天的假(包括双休)!!

          不过这个暑假也学到了许多interesting的东西  ( ̄▽ ̄#) = ﹏﹏

以下为清单(7月):

                                                                哈希,线段树,堆,树状数组,并查集,

                                                           伸展树,Treap,平衡树,AVL树,树链剖分 。 (是不是很眼熟~~) 

                                     

 

以下为清单(8月):

                                                  Floyd, 树形DP,拓扑排序,网络流,费用流,关键路径,

                                           康托展开,强联通分量,最大二分匹配,最小覆盖问题,快速幂,堆,

                             线段树,同余方程(组),线性筛,欧拉函数,斜率优化,扩展欧几里得算法(还有   对拍  (# ̄▽ ̄#))

 

小火山厉害吧!

 

有诗曰:

            混沌未分天地乱,渺渺茫茫无人见。

            自从盘古破鸿蒙,开辟从兹清浊辨。

            覆载群生仰至仁,发明万物皆成善。

            欲知造化会元功,须看《西游释厄传》。

 

 

 

来一道水题

       

题目描述

 【问题描述】
         在一个N*N(1<=n<=1000)的网格中,在某些时刻鼹鼠从在某个网格探出来透气。你可以控制一个机器人打鼹鼠,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的话,那么这个鼹鼠就会被机器人打死。机器人每一时刻只能够移动一格或原地不动。机器人只能移向上下左右四个网格,不能走出网格。游戏开始时,你可以*选定机器人的初始位置。
         现在你知道在一段时间内有M(1<=M<=10000)个鼹鼠和它出现的时间T和地点(X,Y),要求你求出机器人最多打死的鼹鼠数量。
 【输入格式】
    第一行,N,M
    接下来的M行T,X,Y
 【输出格式】
    最多打死的鼹鼠数量
 【输入样例】


2 2

1 1 1
2 2 2


 【输出样例】
1

 

 

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct node
{
    int x,y,t;
}y[110000];
 
int tmp(node n1,node n2)
{
    return n1.t<n2.t;
}
 
int f[110000];
 
 
int main()
{
    int n,m;
    memset(f,0,sizeof(f));
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&y[i].t,&y[i].x,&y[i].y);
        if(y[i].x<1||y[i].y<1||y[i].y>n||y[i].x>n)
        y[i].t;
    }
     
    sort(y+1,y+1+m,tmp);
    for(int i=1;i<=m;i++) f[i]=1;
 
    for(int i=2;i<=m;i++)
    {
        for(int j=i-1;j>=1;j--)
        if(abs(y[i].x-y[j].x)+abs(y[i].y-y[j].y)<=y[i].t-y[j].t)
        f[i]=max(f[i],f[j]+1);
    }
    int ans=0;
    for(int i=1;i<=m;i++)
    if(f[i]>ans)
    ans=f[i];
    printf("%d",ans);
    return 0;
}