但愿复赛的时候旁边坐的不是学军镇海杭二绍一的众神犇。

 

阅览室

模拟

【问题描述】

一个阅览室每天都要接待大批读者。阅览室开门时间是 0,关门时间是 T。每位读者的到达时间都

不一样,并且想要阅读的刊物不超过 5 本。每位读者心里对自己想看的刊物都有一个排位,到达之后

他会先去找自己最想看的刊物,如果找不到则去找其次想看的刊物。如果找不到任何他想看的刊物,

他会开始等待,直到有一本以上的他想看的刊物被人放回原处。当然,他会先去拿其中自己最想看的

刊物。当他看完某一本刊物后,就把它放回原处,接着去找自己没看过的最想看的刊物。如此下去,

直到看完所有他想看的刊物为止。矛盾出现在两个人同时想要拿同一本刊物的时候。阅览室为了避免

读者之间出现争执,作了一个规定,读者每次在开始等待时先去服务台做一次登记。如果两个人都同

时想要一本刊物,那么先登记的读者将得到这本刊物。如果两个人同时登记,那么先到达阅览室的读

者将得到刊物。没得到的人就只能去找其他的刊物看。阅览室关门时,所有读者都将被强迫离开阅览

室,不再允许继续阅读。

现在阅览室想做一个统计调查,你被要求写一个程序来模拟这个过程计算出所有刊物被阅读的总

次数。当某个读者开始阅读某本刊物时,该刊物的被阅读次数就加 1,无论这本刊物最后有没有被读

完。

【输入】

输入包括了多个测试数据。每个测试数据开头是两个整数 T 和 n(1≤n≤100),分别表示图书馆

关门时间和读者总数。接下来按照读者的到达时间先后依次给出了每位读者的具体描述。每个读者描

述开头是一个整数 t(0≤t<T),表示该读者到达时间。接下来一行开头是一个整数 k(1≤k≤5),

表示该读者想要看的刊物数目。之后跟着 2k 个整数按照读者想要阅读的刊物的顺序依次给出了刊物的

描述。其中第 2i-1 个整数表示刊物的编号 s(0≤s<1000),第 2i 个整数表示该读者读完这本刊物所需的时间。

【输出】

对于每个测试数据,在单独一行里输出所有刊物被阅读的总次数。

【输入样例】

10 4

1

2 1 4 2 5

3

1 2 4

7

3 2 2 1 3 3 2

9

1 4 2

【输出样例】

5

【解题过程】

神一样的模拟题,刚看到的时候很受打击,感觉就是要跪。

题目里面没有给出 T 的范围,但是抱着试一试的心态,还是根据时间来模拟了。更稳妥的做法应该是将时间离散化。

首先我们对于每本书维护一个堆表示登记要看这本书的人,按照登记时间与到达时间排序。

对于某个时刻的某个读者,按顺序找他所有想看的书如果没有人在看那本书,那就看那本书的堆顶是不是自己,如果是,那就将那本书占为己有,否则就继续找下一本书。如果所有想看的书都被占用了,就进行登记(登记前判断下之前是否已经登记过了)。

但是题目里没有说清楚的是,如果一个人没有任何一本想看的书可以看,那么应该对每一本都进行登记还是只对最想看的那一本进行登记?我选择了前一种处理,然后就跪了。

 

影像之结构化特征

FloodFill

【问题描述】

在影像比对中,有一种方法是利用影像中的边缘(edge)资讯,计算每个边缘资讯中具有代表性的

结构化特征,以作为比对两张影像是否相似的判断标准。 Water-filling 方法是从每个边缘图的一

个端点开始,绕着相连的边缘点走并依序编号。若走到某一步时,遇到一个以上不同的连接点,则分

成不同路径同时继续走,直到没有任何连接点为止。如果一个点和另一个点为左右相邻或上下相邻,

就称为连接。

例如,在图一的影像中包含三个边缘图,每个边缘图由一些互相连接的边缘点构成。图中以黑色

的方块代表边缘点,白色的方块代表背景。在 Water-filling 方法中,首先,从第一行(row)开始,

由左至右,由上至下,先找到第一个黑点并编号为 1。接着,找 1 的下一个尚未编号的连接点并编号

为 2。依此方法继续往下一个点前进并依序编号。在编号 6 的点之后有两个尚未编号的连接点,此时,

则分为两条路线,并同时编号为 7 继续往下走。当走到没有任何的相连点时,则结束现有边缘图的编

号,并继续对影像中的其它边缘图编号。走完图一所有边缘图后所得到的编号如图二所示。所以,走

完这三个边缘图所需要的步数分别为 12、7 及 3;因此,12、7 及 3 可以作为代表此张影像的结构化

特征。请注意:位于斜对角上的两点不能算做连接。

请写一个程序计算每个影像中,以 Water-filling 方法走完其中所有的边缘图后,将每个边缘图所需走的步数输出。

【输入】

输入文件包含一个正方形的影像。

第一行是 n(1≤n≤1000),表示正方形的规模。

接下来的 n 行 n 列表示影像内容:0 表示背景的白点,1 表示黑色的边缘点。

【输出】

对于每个输入的影像,以 Water-filling 方法走完所有的边缘图后,先输出此影像中共有几个

边缘图。然后按升序方式输出每个边缘图所需走的步数。

【输入样例 1】

10

0000000000

0011110000

0000010000

0011111000

0010110100

0010010110

0011110010

0100010010

0100000110

0100000000

【输出样例 1】

3

3

7

12

9

【输入样例 2】

000000011

111111101

100000101

111111101

100010101

100010101

111111101

000000001

000000011

【输出样例 2】

2

11

12

【解题过程】

直接用 BFS FloodFill。

听说由于题目是台湾人出的,而台湾人的行和列和大陆这边刚好是反的,然后就跪了。

 

诸侯安置

动态规划

【问题描述】

很久以前,有一个强大的帝国,它的国土成正方形状,如图所示。

这个国家有若干诸侯。由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中

的一格)。但是,这些诸侯又非常好战,当两个诸侯位于同一行或同一列时,他们就会开战。如下图为

n=3 时的国土,阴影部分表示诸侯所处的位置。前两幅图中的诸侯可以互相攻击,第三幅则不可以。

国王自然不愿意看到他的诸侯们互相开战,致使国家动荡不安。因此,他希望通过合理的安排诸

侯所处的位置,使他们两两之间都不能攻击。

现在,给出正方形的边长 n,以及需要封地的诸侯数量 k,要求你求出所有可能的安置方案数。

(n≤100,k≤2n2-2n+1)

由于方案数可能很多,你只需要输出方案数除以 504 的余数即可。

【输入】

仅一行,两个整数 n 和 k,中间用一空格隔开。

【输出】

一个整数,表示方案数除以 504 的余数。

【输入样例】

2 2

【输出样例】

4

【Hint】

四种安置方案如图 2-4 所示。注意:镜面和旋转的情况属于不同的方案。

【解题过程】

首先,无解的情况是很好判断的。

很明显是动态规划,但是很可惜我想到的 DP 是错的,然后跪了。

先看这样一幅图:

显然,这样的一幅图与原图是等价的,但比原图更方便处理。

我们可以用 f(i, j) 表示以第 i 列为最后一列,放置 j 个棋子的方案数,则

f(i, j) = sum{ f(k, j-1)*(i-j+1) }, j-1<=k<i

 

(唉,果然 too young too simple,sometimes naive)

(连跪三题不想多说)

10day1的更多相关文章

  1. 二模10day1解题报告

    T1.阅览室(reading) 有一个0~T时间内开放的阅览室,n个读者来读书每人k本,编号和看完所需时间在输入中.其中喜欢度降序排列(不考虑数值),每个人先看喜欢的,如果没有(被人拿走了)就继续找第 ...

随机推荐

  1. Pandas 数据分析基础

    Pandas 安装 anaconda 安装: conda list pandas 查看是否已经安装 conda install pandas conda update pandas pip 安装 pi ...

  2. C#API函数

    API函数是构筑Windows应用程序的基石,是Windows编程的必备利器.每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法,或者是调用Windows A ...

  3. Android -- 两个activity界面的切换, 显示Intent 和 隐式Intent,putExtra传递数据

    1. 两个Activity之间可以通过Intent切换, 包括显示Intent 和 隐式Intent. 实例代码 MainActivity.java public class MainActivity ...

  4. 实现Promise的first等各种变体

    本篇文章主要是想通过ES6中Promise提供的几个方法,来实现诸如first.last.none.any等各种变体方法! 在标准的ES6规范中,提供了Promise.all和Promise.race ...

  5. Mahout 0.10.1安装(Hadoop2.6.0)及Kmeans测试

    1.版本和安装路径 Ubuntu 14.04 Mahout_Home=/opt/mahout-0.10.1 Hadoop_Home=/usr/local/hadoop Mavent_Home=/opt ...

  6. 设计模式--原型模式C++实现

    原型模式C++实现 1定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 2类图 3实现 class Prototype { protected: Prototype(); publ ...

  7. cowsay

    # apt install cowsay sl cmatrix $ cowsay "hello~" $ find /usr/share/cowsay/cows -iname &qu ...

  8. 不使用构造方法创建Java对象: objenesis的基本使用方法

    转载:http://blog.csdn.net/codershamo/article/details/52015206 objenesis简介: objenesis是一个小型Java类库用来实例化一个 ...

  9. 利用ModSecurity防御暴力破解

    利用ModSecurity防御暴力破解 from:http://www.freebuf.com/articles/web/8749.html 2013-04-18 共553248人围观 ,发现 12 ...

  10. ActiveMQ教程(简介与安装)

    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...