zoukankan      html  css  js  c++  java
  • noip模拟赛

    T1 elim

    给你一个消消乐游戏的界面,$3$ 个及以上的同色连块会消除,求一次消除之后是什么样的

    sol:模拟

    T2 battleground

    给你一个 $n imes n$ 的棋盘,上面有 $m$ 个玩家,玩家可以向 $8$ 个方向走,有的地方有障碍不能走,不能斜着从两个障碍里面挤过去(大概就是右边有障碍 + 下面有障碍 = 你不能走到右下)。有 $f$ 个回合,每回合会给你一个毒圈,毒圈里面的障碍会无效,所有玩家都会向毒圈里的一个目标(每个人可能目标不一样)走,在毒圈外面走一步会 $-1s$ ,给出每个人初始的生命,求这 $m$个人跑毒结束后还有多少生命 (生命值最低为 $0$ ,去世的玩家生命值视为 $0$ )

    sol:

    因为毒圈里不掉血也没有障碍,所以只要找出每个人走到毒圈里要走多远就可以了

    不妨设他们都要走到毒圈的圆心,于是我们可以从圆心开始 $bfs$ ,圈里走一步代价为 $0$ 

    圈外走一步代价为 $1$ 算出走到每个点的代价就可以算出每个人每轮扣的血了

    T3 greedy

    给你一个求图的独立集的算法,让你模拟

    算法如下:

    1.规约

    step1.删掉所有度为 0 的点加入独立集

    step2.删掉所有度为 1 的点和它相邻的点,并把那个编号小的那个加入独立集

    如果当前不能规约,我们执行下面的

    2.贪心

    step1.找出度最大的点,如果唯一,删掉它

    step2.如果不唯一,找到一个删掉后能使剩下的度数为 1 的点数最多的点,如果还有多个,删掉编号最大的点

    $n leq 10^5$

    $m leq 5 imes 10^5$

    sol:暴力

    维护一个 set / 可删除堆

    堆内维护一个三元组表示 (度,跟它相连且度为 2 的点的个数,编号)

    操作 1 直接做,操作 2 也是直接做

    每个点只有在当做堆顶和度为 1 的时候会执行两次“把周围一圈的点的度 -1 ”

    所以复杂度是对的

  • 相关阅读:
    Oracle用户管理
    Oracle基本使用
    Oracle 11g安装、卸载
    Oracle
    C#面向对象
    看看Google用户体验十大设计原则
    [转]Delphi 常用控件之TlistView总结
    github + hexo 搭建博客
    CSS3 filter属性学习
    border-box——一种改变盒子尺寸的方法
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/9861018.html
Copyright © 2011-2022 走看看