Problem

楼房重建

Time  Limit:  10  Sec\mathrm{Time\;Limit:\;10\;Sec}
Memory  Limit:  256  MB\mathrm{Memory\;Limit:\;256\;MB}

Description

A\mathrm{小A}的楼房外有一大片施工工地,工地上有NN栋待建的楼房。每天,这片工地上的房子拆了又建、建了又拆。他经常无聊地看着窗外发呆,数自己能够看到多少栋房子。
为了简化问题,我们考虑这些事件发生在一个二维平面上。A\mathrm{小A}在平面上(0,0)(0,0)点的位置,第ii栋楼房可以用一条连接(i,0)(i,0)(i,Hi)(i,H_i)的线段表示,其中HiH_i为第ii栋楼房的高度。如果这栋楼房上任何一个高度大于00的点与(0,0)(0,0)的连线没有与之前的线段相交,那么这栋楼房就被认为是可见的。
施工队的建造总共进行了MM天。初始时,所有楼房都还没有开始建造,它们的高度均为00。在第ii天,建筑队将会将横坐标为XiX_i的房屋的高度变为YiY_i(高度可以比原来大——修建,也可以比原来小——拆除,甚至可以保持不变——建筑队这天什么事也没做)。请你帮A\mathrm{小A}数数每天在建筑队完工之后,他能看到多少栋楼房?

Input

第一行两个正整数N,MN,M
接下来MM行,每行两个正整数Xi,YiX_i,Y_i

Output

MM行,第ii行一个整数表示第ii天过后A\mathrm{小A}能看到的楼房有多少栋。

Read more »

Problem

【NOI2004】郁闷的出纳员

Time  Limit:  5  Sec\mathrm{Time\;Limit:\;5\;Sec}
Memory  Limit:  64  MB\mathrm{Memory\;Limit:\;64\;MB}

Description

OIER\mathrm{OIER}公司是一家大型专业化软件公司,有着数以万计的员工。作为一名出纳员,我的任务之一便是统计每位员工的工资。
这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。如果他心情好,就可能把每位员工的工资加上一个相同的量。反之,如果心情不好,就可能把他们的工资扣除一个相同的量。我真不知道除了调工资他还做什么其它事情。
工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气愤地离开公司,并且再也不会回来了。每位员工的工资下界都是统一规定的。每当一个人离开公司,我就要从电脑中把他的工资档案删去,同样,每当公司招聘了一位新员工,我就得为他新建一个工资档案。
老板经常到我这边来询问工资情况,他并不问具体某位员工的工资情况,而是问现在工资第kk多的员工拿多少工资。每当这时,我就不得不对数万个员工进行一次漫长的排序,然后告诉他答案。
好了,现在你已经对我的工作了解不少了。正如你猜的那样,我想请你编一个工资统计程序。怎么样,不是很困难吧?

Input

第一行有两个非负整数nnminminnn表示下面有多少条命令,minmin表示工资下界。
接下来的nn行,每行表示一条命令。命令可以是以下四种之一:

名称 格式 作用
I\mathrm{I}命令 I  kI\;k 新建一个工资档案,初始工资为kk
A\mathrm{A}命令 A  kA\;k 把每位员工的工资加上kk
S\mathrm{S}命令 S  kS\;k 把每位员工的工资扣除kk
F\mathrm{F}命令 F  kF\;k 查询第kk多的工资

I\mathrm{I}命令、A\mathrm{A}命令、S\mathrm{S}命令中的kk是一个非负整数,F\mathrm{F}命令中的kk是一个正整数。
在初始时,可以认为公司里一个员工也没有。
I\mathrm{I}命令的条数不超过10510^5
A\mathrm{A}命令和S\mathrm{S}命令的总条数不超过100100
F\mathrm{F}命令的条数不超过10510^5
每次工资调整的调整量不超过10001000
新员工的工资不超过10510^5

Output

输出行数为F\mathrm{F}命令的条数加一。
对于每条F\mathrm{F}命令,你的程序要输出一行,仅包含一个整数,为当前工资第kk多的员工所拿的工资数,
如果kk大于目前员工的数目,则输出1-1
输出文件的最后一行包含一个整数,为离开公司的员工的总数。

Read more »

Problem

【BJWC2017】神秘物质

Time  Limit:  20  Sec\mathrm{Time\;Limit:\;20\;Sec}
Memory  Limit:  256  MB\mathrm{Memory\;Limit:\;256\;MB}

Description

21ZZ\mathrm{21ZZ}年,冬。
小诚退休以后,不知为何重新燃起了对物理学的兴趣。他从研究所借了些实验仪器,整天研究各种微观粒子。
这一天,小诚刚从研究所得到了一块奇异的陨石样本,便迫不及待地开始观测。在精密仪器的视野下,构成陨石的每个原子都无比清晰。
小诚发现,这些原子排成若干列,每一列的结构具有高度相似性。于是,他决定对单独一列原子进行测量和测试。
被选中的这列共有NN个顺序排列的原子。最初,第ii个原子具有能量EiE_i。随着时间推移和人为测试,这列原子在观测上会产生两种变化:

  • merge  x  emerge\;x\;e:当前第xx个原子和第x+1x+1个原子合并,得到能量为ee的新原子;
  • insert  x  einsert\;x\;e:在当前第xx个原子和第x+1x+1个原子之间插入一个能量为ee的新原子。

对于一列原子,小诚关心的是相邻一段中能量最大和能量最小的两个原子的能量差值,称为区间极差。因此,除了观测变化外,小诚还要经常统计这列原子的两类数据:

  • max  x  ymax\;x\;y:当前第xx到第yy个原子之间的任意子区间中区间极差的最大值;
  • min  x  ymin\;x\;y:当前第xx到第yy个原子之间的任意子区间中区间极差的最小值。

其中,子区间指的是长度至少是22的子区间。
小诚坚信这项研究可以获得诺贝尔物理学奖。为了让小诚早日了结心愿,你能否帮助他实现上述的观测和测量呢?

Input

第一行,两个整数N,MN,M,分别表示最初的原子数目和事件总数。
第二行,NN个整数E1,E2,,ENE_1,E_2,\cdots,E_N,由空格隔开,依次表示每个原子的能量。
接下来MM行, 每行为一个字符串和两个整数, 描述一次事件,格式见题目描述。

Output

输出若干行, 按顺序依次表示每次maxmaxminmin类事件的测量结果。

Read more »

Problem

【HEOI2013】Segment

Time  Limit:  40  Sec\mathrm{Time\;Limit:\;40\;Sec}
Memory  Limit:  256  MB\mathrm{Memory\;Limit:\;256\;MB}

Description

要求在平面直角坐标系下维护两个操作:

  1. 在平面上加入一条线段。记第ii条被插入的线段的标号为ii
  2. 给定一个数kk,询问与直线x=kx=k相交的线段中,交点最靠上的线段的编号。

Input

第一行一个整数nn,表示共nn个操作。
接下来nn行,每行第一个数为0011
若该数为00,则后面跟着一个正整数kk,表示询问与直线x=((k+lastans1)%39989+1)x=((k+lastans–1)\%39989+1)相交的线段中交点(包括在端点相交的情形)最靠上的线段的编号,其中%\%表示取余。若某条线段为直线的一部分,则视作直线与线段交于该线段yy坐标最大处。若有多条线段符合要求,输出编号最小的线段的编号。
若该数为11,则后面跟着四个正整数x0,y0,x1,y1x_0,y_0,x_1,y_1,表示插入一条两个端点为((x0+lastans1)%39989+1((x_0+lastans-1)\%39989+1,(y0+lastans1)%109+1)(y_0+lastans-1)\%10^9+1)((x1+lastans1)%39989+1((x_1+lastans-1)\%39989+1,(y1+lastans1)(y_1+lastans-1)%10^9+1)的线段。
其中lastanslastans为上一次询问的答案。初始时lastans=0lastans=0

Output

对于每个00操作,输出一行,包含一个正整数,表示交点最靠上的线段的编号。
若不存在与直线相交的线段,答案为00

Read more »

Problem

最大团

Time  Limit:  10  Sec\mathrm{Time\;Limit: \;10\;Sec}
Memory  Limit:  256  MB\mathrm{Memory\;Limit:\;256\;MB}

Description

给出平面上NN个点的坐标,和一个半径为RR的圆心在原点的圆。
对于两个点,它们之间有连边,当且仅当它们的连线与圆不相交。
求此图的最大团。

Input

第一行两个整数NNRR, 表示点数和圆的半径。
接下来NN行,每行两个整数xix_iyiy_i,表示第ii个点的坐标
保证每个点都严格在园外,且两两直线不与圆相切。

Output

输出一个整数:最大团的大小。

Read more »

Problem

【HNOI2008】Cards

Time  Limit:  10  Sec\mathrm{Time\;Limit:\;10\;Sec}
Memory  Limit:  162MB\mathrm{Memory\;Limit:\;162MB}

Description

小春现在很清闲,面对书桌上的NN张牌,他决定给每张染色。
目前小春只有33种颜色:红色,蓝色,绿色。他询问Sun\mathrm{Sun}有多少种染色方案,Sun\mathrm{Sun}很快就给出了答案。
进一步,小春要求染出SrSr张红色,SbSb张蓝色,SgSg张绿色。他又询问有多少种方案,Sun\mathrm{Sun}想了一下,又给出了正确答案。
最后小春发明了MM种不同的洗牌法,他又问Sun\mathrm{Sun}有多少种不同的染色方案。两种染色方法相同当且仅当其中一种可以通过任意的洗牌法(即可以使用多种洗牌法,而每种方法可以使用多次)洗成另一种。
Sun\mathrm{Sun}发现这个问题有点难度,决定交给你。
答案可能很大,只要求出答案除以PP的余数(PP为质数)。

Input

第一行输入55个整数:Sr,Sb,Sg,m,pSr,Sb,Sg,m,pn=Sr+Sb+Sgn=Sr+Sb+Sg
接下来mm行,每行描述一种洗牌法,每行有nn个用空格隔开的整数X1X2XnX_1X_2\cdots X_n,恰为11nn的一个排列,表示使用这种洗牌法,第ii位变为原来的XiX_i位的牌。
数据保证任意多次洗牌都可用mm种洗牌法中的一种代替,且对每种洗牌法,都存在一种洗牌法使得能回到原状态。

Output

不同染法除以PP的余数。

Read more »

Problem

概率好题

Time  Limit:  4  Sec\mathrm{Time\;Limit:\;4\;Sec}
Memory  Limit:  131072  KB\mathrm{Memory\;Limit:\;131072\;KB}

Description

甲乙进行比赛,他们各有k1,k2k_1,k_2个集合[Li,Ri][L_i,R_i],每次随机从他们拥有的每个集合中都取出一个数。
S1=甲取出的数S_1=\sum甲取出的数S2S_2同理。若S1>S2S_1>S_2甲胜;若S1=S2S_1=S_2平局;否则乙胜。
分别求出甲胜、平局、乙胜的概率。
(显然这个概率是有理数,记为pq\frac{p}{q},则输出答案为pqmod109+7\frac{p}{q}\bmod{10^9+7}(逆元)
注意:多组数据

Input

一个数,数据组数(T5)(T\le5)
对于每组数据 输入顺序为

1
2
k1 L1 R1 ... Lk1 Rk1
k2 L1 R1 ... Lk2 Rk2

(k1,k28,1LR107)(k_1,k_2\le8,1\le L\le R\le10^7)

Output

甲胜、平局、乙胜的概率。

Read more »

Problem

Synchronized Subsequence

Time  limit:  2  Sec\mathrm{Time\;limit:\;2\;Sec}
Memory  limit:  1024  MB\mathrm{Memory\;limit:\;1024\;MB}

Statement

You are given a string SS of length 2N2N, containing NN occurrences of a and NN occurrences of b.
You will choose some of the characters in SS. Here, for each i=1,2,,Ni=1,2,\cdots,N, it is not allowed to choose exactly one of the following two: the ithi^{th} occurrence of a and the ithi^{th} occurrence of b. (That is, you can only choose both or neither.) Then, you will concatenate the chosen characters (without changing the order).
Find the lexicographically largest string that can be obtained in this way.

Constraints

1N30001\le N\le3000
SS is a string of length 2N2N containing NN occurrences of a and NN occurrences of b.

Input

Input is given from Standard Input in the following format:
NSN\\S

Output

Print the lexicographically largest string that satisfies the condition.

Read more »

Problem

【POI2007】对称轴osi

Time  Limit:  10  Sec\mathrm{Time\;Limit:\;10\;Sec}
Memory  Limit:  162  MB\mathrm{Memory\;Limit:\;162\;MB}

Description

FGD\mathrm{FGD}小朋友——一个闻名遐迩的年轻数学家——有一个小MM,yours\mathrm{yours}FGD\mathrm{FGD}小朋友非常喜欢他的MM,所以他很乐意帮助他的MM做数学作业。但是,就像所有科学的容器一样,FGD的大脑拒绝不停地重复思考同样的问题。不幸的是,yours\mathrm{yours}是一个十分用功的学生,所以她不停地让FGD\mathrm{FGD}帮助她检查她的作业。
一个阳光明媚的周末,yours\mathrm{yours}的数学老师布置了非常多的寻找多边形的对称轴的题,足够她做相当长的一段时间了。在此之前FGD\mathrm{FGD}已经决定去海边度过这个难得的假期,不过他还是觉得应该帮助他的MM对付可爱的数学作业。很快地,他找到了解决方案,最好写一个程序来帮助yours\mathrm{yours}检查她的数学作业。
因为FGD\mathrm{FGD}并非一个计算机科学家,所以他找到了他的好朋友你,请你帮助他完成这个任务。
请写一个程序:读入多边形的描述计算出每个多边形的对称轴数将计算的结果输出。

Input

输入的第一行包含一个正整数T  (1T10)T\;(1\le T\le10),为多边形的边数。
接下来,为TT个多边形的描述。
每个描述的第一行为一个正整数n  (3n105)n\;(3\le n\le10^5),表示了多边形的点数。
后面nn行每行两个整数xxy  (108x,y108)y\;(-10^8\le x, y\le10^8),依次表示多边形的顶点坐标。
多边形不一定是凸的,但是不自交。任何两条边都只有最多一个公共点,即它们的公共端点。此外,没有两条连续的边平行。

Output

你的程序应该输出正好TT行,第k行包含了一个整数nkn_k——表示第kk个多边形有多少个对称轴。

Read more »

Problem

【TJOI2018】Party

Time  Limit:  60  Sec\mathrm{Time\;Limit:\;60\;Sec}
Memory  Limit:  256  MB\mathrm{Memory\;Limit:\;256\;MB}

Description

小豆参加了NOI\mathrm{NOI}的游园会,会场上每完成一个项目就会获得一个奖章,奖章只会是N,O,I的字样。在会场上他收集到了KK个奖章组成的串。
兑奖规则是奖章串和兑奖串的最长公共子序列长度为小豆最后奖励的等级。
现在已知兑奖串长度为NN,并且在兑奖串上不会出现连续三个奖章为NOI,即奖章中不会出现子串NOI
现在小豆想知道各个奖励等级会对应多少个不同的合法兑奖串。

Input

第一行两个数,N,KN,K分别代表兑奖串的长度,小豆收集的奖章串的长度。
第二行一共KK个字符,表示小豆得到奖章串。

Output

一共K+1K+1行,第ii行表示小豆最后奖励等级为i1i-1的不同的合法兑奖串的个数,可能这个数会很大,结果对109+710^9+7取模。

Read more »