The 9-th BIT Campus Programming Contest for Junior Grade Group
A. 出题人的碎碎念
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

欢迎各位同学来到本届北京理工大学程序设计新生赛,作为本场比赛的出题人,也是ACM俱乐部的成员之一,我将为大家简要介绍本次比赛以及北京理工大学ACM俱乐部。

北京理工大学ACM俱乐部创立于2018年暑期,由此前的北京理工大学ACM/ICPC集训队和计算机学院学生科技创新创业基地算法实验室联合形成。团队创立以后,俱乐部成员齐手并进,取长补短,共同训练,为本年度的比赛积极地筹备,为获奖奠定了良好的基础。

ACM俱乐部主要负责组织学生参加各种算法竞赛、程序设计竞赛,涉及到的比赛包括但不限于蓝桥杯、团体程序设计天梯赛(CCCC)、中国大学生程序设计竞赛(CCPC)、国际大学生程序设计竞赛(ICPC)。之中,CCPC与ICPC的各种区域赛是ACM俱乐部重点关注的赛事,该赛事设立金奖、银奖、铜奖。为了便于理解,2020至2021年的大部分ICPC区域赛的奖牌发放规则可以粗略地概括为:金奖发放参赛队伍的$$$10\%$$$(不为整数则向下取整)、银奖(不含金奖人数)发放参赛队伍的$$$20\%$$$(不为整数则向下取整)、铜奖(不含金奖、银奖人数)发放参赛队伍的$$$30\%$$$(不为整数则向下取整)。

而在俱乐部成员的努力训练下,ACM俱乐部成绩斐然,在最近于2021年5月16日举办的ICPC银川区域赛中,全部由20级新生组成的ddl战神队在$$$499$$$支参赛队伍中获得了冠军,是北理工历史上第一个区域赛冠军,也使得北理工时隔多年再次重返ICPC世界总决赛。此外,由18级同学组成的"迪杰斯特拉大战特斯拉"队、由16与17级同学组成的"putchar"队和由两名18级同学与一名19级同学组成的"摸鱼两年半"队在本场比赛中分别获得了第$$$112$$$名、$$$126$$$名、$$$148$$$名的名次。

说回本次新生赛,本次新生赛面向所有大一和大二对程序设计竞赛有兴趣的同学,题目难度由易到难都有包含,但注意,题目顺序并不是按难度排序的,各位同学如果遇到不会做的题,可以先看看别的题目,出题人认为本场比赛可以上手做的题目还是比较多的,欢迎大家多多尝试。

本场比赛的出题人主要是"克鲁斯卡尔大战克苏鲁"队的三位队员,该队在本年度的区域赛中一共获得过两块区域赛金牌与一块$$$EC-Final$$$铜牌,他们在算法竞赛网站Codeforces上的用户名分别是"bit_liyiwen"、"chenhongta0"、"zhanggengchen"(不含引号)。此外,出题人还有用户名为" strawberrry"的龙神、用户名为"shenyunhan"的沈帝,以及用户名为"fried-chicken"的zyw。事实上,这次比赛的许多题目当中,都可以看到zyw这个名字的出现,但一个有趣的事实是:所有题目里出现了zyw的题目,反而都不是zyw出的,是其他出题人为了搞zyw而出的,而所有题面里没有出现zyw的题目,反而全部是zyw出的,唯一的例外是本题,本题题面中虽然出现了zyw,但也是zyw出的。

最后,也感谢睿信科协、各位学长、志愿者、辅导员、老师与校领导提供的各种帮助、技术支持与物资支持,提前预祝本届程序设计新生赛圆满成功!

阅读完上面这段文字后,请你回答以下五个问题:

问题一:请输出三个整数,依次表示北京理工大学在2021年ICPC银川区域赛中获得的金牌、银牌、铜牌数量。

问题二:本场比赛中,出题人为"fried-chicken"的题目有几道?输出一个整数表示你的答案。

问题三:根据文章信息,参加了2021年ICPC银川区域赛的同学中,最多有几位同学可能参与本次程序设计新生赛?输出一个整数表示你的答案。

问题四:"克鲁斯卡尔大战克苏鲁"的三位成员的Codeforces用户名中,一共出现了多少个非小写英文字母的字符?输出一个整数表示你的答案。

问题五:下列四个说法中,有几个是正确的?输出一个整数表示你的答案。

说法一:2018年的暑期之前,北京理工大学并没有负责组织参与ICPC的组织;

说法二:小明在本次比赛中发现C题不会做,因为C题后面的题肯定都比C题难,所以小明应该放弃本次比赛,回宿舍睡大觉;

说法三:本次新生赛的成功举办,全部都是ACM俱乐部的功劳;

说法四:ddl战神队是北理工历史上第一个进入ICPC世界总决赛的队伍。

上述五个问题的答案可以用七个整数表示(问题一含三个整数,其余四个问题每题一个整数)。请你输出一行七个整数,表示这五个问题的答案。

特别地,由于出题人心地善良,允许你回答的五个问题中有一个问题是错误的,即,你回答对五个问题或四个问题,都将收获一个绿绿的$$$correct$$$。

Input

本题没有输入,你只需要输出答案。

Output

输出七个空格分隔的整数,表示五个问题的答案。五个问题中答对四个即可通过此题。

Example
Input
(No input)
Output
1 2 3 4 5 6 7
Note

上方的样例只用于描述题目输入输出的格式,不代表输出内容就是对应问题的正确答案。

上述输出的含义是,答题人认为:问题一的答案是$$$1,2,3$$$;问题二的答案是$$$4$$$;问题三的答案是$$$5$$$;问题四的答案是$$$6$$$,问题五的答案是$$$7$$$。

B. 页面置换
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。

通俗的理解:现代计算机常采用页式存储,也就是把各种内容切分成固定大小的块进行存储。操作系统在使用某个页面的内容时,只能从内存中读取内容,所以当要使用某个页面时,如果其不在内存中,就需要将其先从外存调入内存中,但是显然内存的大小是有限的,当新的页面将要进入内存时,如果内存已满,就需要淘汰掉现有的页面,所以需要一些策略来对页面进行调度,这种策略就被叫做页面调度算法。

缺页中断:当调用某页面时,若其不在内存中,就发生缺页中断。

下面给出三种调度算法

1.FIFO调度算法 当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。

2.LRU调度算法 当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。 即淘汰最近最长时间未访问过的页面。

3.OPT调度算法 当需要淘汰一个页面时,从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。

zyw想知道这三种调度算法的优劣,他会以缺页次数为指标,所以请你告诉他哪一种方法缺页中断次数最少,并且告诉他会发生多少次缺页中断。(假定一开始内存中没有任何页面)

Input

第一行给定三个整数n, m, k,分别表示页面请求次数,外存中页面个数(从1开始编号),内存的大小。其中n ≤ 105, m ≤ 103, k ≤ 100

第二行给出n1m之间的整数,表示页面调用请求的顺序。

Output

第一行输出最优的方法,如果有两种或更多方法是最优的,输出任意一种都可以。

第二行输出缺页中断的次数。

Example
Input
12 8 4
6 2 4 1 4 6 3 8 4 5 7 3
Output
FIFO
8

D. 法力风暴
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

zyw最近迷上了一款TCG(Trading Card Game)桌游,万智牌。 在万智牌中有着5种不同的基础法术力。 玩家可以使用不同的法术力可以释放不同的咒语来进行史诗级的对决。

为了简化题目,我们假定只有红色与蓝色的法术力。

在游戏的某个回合中,zyw拥有着n张可以释放的咒语,每个咒语都有其法术力的消耗,第i个咒语的消耗是ri个红色法术力和bi个蓝色法术力。

zyw突然发现自己竟一个法术都无法释放,他十分无奈只能跳过这一回合。

请问zyw这回合最多可能拥有多少点法术力(红色和蓝色的总和)。

Input

第一行给出一个整数T,表示题目一共有T组数据。

对于每组数据,第一行给出一个整数n(n ≤ 5000)。

2n + 1行每行给出两个整数,第i + 1行的两个整数表示ribi(ri ≤ 106, bi ≤ 106)。

保证对于任意的i,有ri + bi > 0

保证Σ{n} ≤ 5000

Output

对于每组数据,输出一个整数,表示zyw最多可能拥有的法术力点数,如果是无限点,则输出INF三个大写字母。

Example
Input
2
3
0 3
3 0
2 2
3
1 3
2 2
3 1
Output
3
INF

E. 肉夹馍
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

zyw是一个旅行爱好者,同时也是一个吃货。zyw最喜欢的事情是到各地旅游并品尝当地的美食。这一次他来到了陕西西安旅游。众所周知,肉夹馍是陕西西安的传统小吃,有着馍香肉酥,肥而不腻,回味无穷的特点。zyw品尝了肉夹馍之后开始思考,为什么没有"肉夹馍夹馍"呢?又为什么没有"馍夹肉夹肉"呢?

于是,他想让卖肉夹馍的师傅为他定制一个肉夹馍,他用一个01串表示他的理想肉夹馍,其中0表示肉,1表示馍,字符串从左到右对应着肉夹馍的从里到外。

我们规定'*'代表肉,'-'代表上下两层的馍,'|'代表右侧的馍片。同时规定,肉夹馍都是向左侧开口,并且最里层的肉或馍长度为2个相应字符,外层的肉或馍宽度都为1且紧紧包裹着里层的肉或馍。

由于题目过于抽象,可以参考样例来进行进一步的理解。

例如,对于样例五的串011,对应的肉夹馍最里层是肉,外面包了两层馍。最里层的肉用两个 * 表示,靠里的一层馍用肉周围的7个字符表示,靠外的一层膜用靠里的一层膜周围的11个字符来表示。

现在,请你将表示zyw定制的肉夹馍的01串转化为图形展示给卖肉夹馍的师傅吧!

Input

输入一行字符串,表示zyw的理想肉夹馍,串长在11000之间且保证只含有01

Output

输出zyw定制版肉夹馍的图形。

Examples
Input
1
Output
--
Input
0
Output
**
Input
01
Output
---
**|
---
Input
10
Output
***
--*
***
Input
011
Output
----
---|
**||
---|
----
Input
001
Output
----
***|
***|
***|
----

G. 理财大师
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

因为zyw穷的离谱,根本没有多余的钱拿来理财,所以本题的主角并不是zyw。

最近学校食堂的价格越来越贵,原本就吃得多的懋懋这下要花更多钱用来吃饭了。

为了避免食堂价格进一步增长,懋懋发行了一种全新的加密货币,北理币(BIT coin,bitc),用于学校食堂消费,来防止通货膨胀带来的食堂价格上涨。和其他加密货币一样,北理币和人民币的汇率(1 bitc能换多少人民币)也会随各种因素而变化,不过作为北理币的发明人,懋懋可以预知北理币的汇率。

龙神作为懋懋的队友,在某次和懋懋聊天时得知了当天接下来n个时刻北理币的汇率,龙神肯定不会错过这个理财机会,但是在用人民币和北理币进行交易时,存在以下几个条件:

  • 单笔最小交易量为0.01 bitc,无单笔最大交易量限制;
  • 由于龙神偏好谨慎投资,在任何时刻,龙神手里都不能持有超过1 bitc
  • 每时刻可以进行任意多笔买卖交易;
  • 每天最多可以进行k笔交易;

龙神初始不持有任何bitc,但有无穷多的人民币,你能帮龙神算算他当天最多能赚多少人民币吗?

Input

第一行2个整数nk ,分别表示当天的时刻数和每天最多交易次数。

第二行n个实数,表示n个时刻的北理币汇率,小数点后最多2位。

Output

一个实数,表示龙神能够获得的最大收益。

若你的输出为a,标准答案为b,则当时,就认为正确。

Examples
Input
4 4
1 2 1.5 2.5
Output
2.00
Input
4 2
1 2 1.5 2.5
Output
1.50
Note

对于样例1,在第1、3时刻买入1 bitc,在第2、4时刻卖出1 bitc,总收益为2rmb

对于样例2,在第1时刻买入1 bitc,在第4时刻卖出1 bitc,总收益为1.5rmb

H. 守门员
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

zyw是一名出色的足球前锋,人称"良乡内马尔"。他在紧张的学习生活之余也不忘记练习自己的足球技巧。这一天他在操场上练习射门,我们将球场看成一个二维平面,宽度为2w的球门的两个门柱坐标分别为( - w, 0)(w, 0)

现在足球摆放在(x1, y1)的位置,zyw要在此处射门。此时守门员的位置在(x2, y2),守门员在zyw射门前能够移动的范围为d,并且只能水平移动。zyw想立刻计算出他能够进球的角度有多少。

Input

第一行,一个数T(1 ≤ T ≤ 105),表示zyw射门的次数。

接下来T行,每行六个整数w, x1, y1, x2, y2, d,含义见题面描述,数据保证y1y2不相等,数据范围0 < y1 ≤ 107,0 ≤ y2 ≤ 107, - 107 ≤ x1, x2 ≤ 107,0 < w, d ≤ 107

Output

对于每一次射门,计算zyw射门能进球的角度,用弧度制表示。

若你的输出为a,标准答案为b,则当时,就认为正确。

Example
Input
3
2 0 2 1 1 1
2 0 2 100 1 5
2 0 2 5 1 100
Output
0.7853981634
1.5707963268
0.0000000000
Note

C语言中反三角函数有acos,asin,atan,返回值为弧度制。

L. 零时困境
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

当法伊、西格玛、戴安娜再次醒来时,发现他们又一次被关在了一个全新的密室中,有了之前几次的经验,他们显得并不吃惊。果然,密室里的小电视里,又出现了零的身影,他沙哑的嗓音也又一次从电视的扬声器中传出:"别担心,这次只要玩一个猜谜游戏,猜中了,你们就可以安全的离开这里"。

"零这家伙,一定又在捣什么鬼,我才不信他会有这么好心。"西格玛喃喃自语道。

游戏的规则是:

零首先写下一个$$$n$$$个数的全排列$$$\{p_n\}$$$,并告诉三人他选择的$$$n$$$。

接着,三人可以进行$$$m$$$次提问,每次提问,三个人每人给出一个数字,要求三个数字两两不相同,记为$$$i,j,k$$$,用于询问$$$p_i,p_j,p_k$$$中的中位数。接到提问后,零会如实回答三个数中中位数是哪一个,告知他们三人中位数的下标(即,零总是诚实地回答$$$i,j,k$$$三个数之一)。

现在,你知道了这$$$m$$$次提问的具体内容与零的回答,请你判断,三人是否可以通过这些信息$$$100\%$$$的确定零手中的排列。

备注:一个含有$$$n$$$个数的全排列$$$\{p_n\}$$$是指一个长为$$$n$$$且$$$1$$$到$$$n$$$的每个数都出现且仅出现一次的序列。例如,$$$[2,1,3],[3,1,2]$$$是全排列,而$$$[1,2,4],[2,3,3]$$$都不是全排列。

Input

输入的第一行是两个整数$$$n,m(1\leq n \leq 10^5,0\leq m \leq 10^5)$$$,表示全排列的长度与三人提出的询问数。

接下来$$$m$$$行,每行四个数字$$$i,j,k,ans(1\leq i,j,k,ans \leq n, ans \in \{i,j,k\})$$$表示一次提问,含义如题面所述。

保证每次提问的$$$i,j,k$$$互不相同但有可能出现相同的提问、保证至少有一个长为$$$n$$$的全排列可以满足所有的$$$m$$$次询问的信息。

Output

请输出一行字符串,若三人可以唯一确定该全排列,输出$$$YES$$$,否则输出$$$NO$$$。

Example
Input
4 2
1 2 3 2
4 1 3 4
Output
NO
Note

对于样例,$$$[1,2,4,3]$$$,$$$[1,3,4,2]$$$,$$$[4,2,1,3]$$$,$$$[4,3,1,2]$$$都是满足条件的全排列,因此三人无法确定全排列到底是什么。