- C23huangminzhe's blog
day4
- 2025-7-10 19:41:15 @
题目名称 | 动物园 | 策略游戏 | 儒略日 | 函数调用 |
---|---|---|---|---|
输入/输出文件名 | zoo.in/ans | game.in/ans | julian.in/ans | call.in/ans |
目录 | zoo | game | julian | call |
提交源程序文件名 | zoo.cpp | game.cpp | julian.cpp | call.cpp |
时间限制(ms) | 1000 | 2000 | ||
空间限制(MB) | 256 | 512 | 256 | |
测试点数目 | 20 | 10 | 20 | |
题目类型 | 传统题 |
注意事项
- 文件名(程序名和输入输出文件名)必须使用英文小写。
- C/C++ 中函数
main()
的返回值类型必须是int
,程序正常结束时的返回值必须是0
。 - 提交的程序代码文件请放置在与CPP文件同名的文件夹内。
- 若无特殊说明,结果的比较方式为全文比较(过滤行末空格及文末回车)。
- 选手提交的程序源文件必须不大于 100KB。
- 程序可使用的栈空间内存限制与题目的内存限制一致。
- 只提供 Linux 格式附加样例文件。
- C++编译选项:‐O2 ‐std=c++14 ‐static
动物园
题目描述
动物园里饲养了很多动物,饲养员小 A 会根据饲养动物的情况,按照《饲养指南》购买不同种类的饲料,并将购买清单发给采购员小 B。
具体而言,动物世界里存在 种不同的动物,它们被编号为 。动物园里饲养了其中的 种,其中第 种动物的编号为 。
《饲养指南》中共有 条要求,第 条要求形如“如果动物园中饲养着某种动物,满足其编号的二进制表示的第 位为 ,则必须购买第 种饲料”。其中饲料共有 种,它们从 编号。本题中我们将动物编号的二进制表示视为一个 位 01 串,第 位是最低位,第 位是最高位。
根据《饲养指南》,小 A 将会制定饲料清单交给小 B,由小 B 购买饲料。清单形如一个 位 串,第 位为 时,表示需要购买第 种饲料;第 位为 时,表示不需要购买第 种饲料。 实际上根据购买到的饲料,动物园可能可以饲养更多的动物。更具体地,如果将当前未被饲养的编号为 的动物加入动物园饲养后,饲料清单没有变化,那么我们认为动物园当前还能饲养编号为 的动物。
现在小 B 想请你帮忙算算,动物园目前还能饲养多少种动物。
输入格式
第一行包含四个以空格分隔的整数 。
分别表示动物园中动物数量、《饲养指南》要求数、饲料种数与动物编号的二进制表示位数。
第二行 个以空格分隔的整数,其中第 个整数表示 。
接下来 行,每行两个整数 表示一条要求。
数据保证所有 互不相同,所有的 互不相同。
输出格式
仅一行一个整数表示答案。
输入输出样例 #1
输入 #1
3 3 5 4
1 4 6
0 3
2 4
2 5
输出 #1
13
输入输出样例 #2
输入 #2
2 2 4 3
1 2
1 3
2 4
输出 #2
2
输入输出样例 #3
输入 #3
见附件中的 zoo/zoo3.in
输出 #3
见附件中的 zoo/zoo3.ans
说明/提示
【样例 #1 解释】
动物园里饲养了编号为 的三种动物,《饲养指南》上的三条要求为:
- 若饲养的某种动物的编号的第 个二进制位为 ,则需购买第 种饲料。
- 若饲养的某种动物的编号的第 个二进制位为 ,则需购买第 种饲料。
- 若饲养的某种动物的编号的第 个二进制位为 ,则需购买第 种饲料。
饲料购买情况为:
- 编号为 的动物的第 个二进制位为 ,因此需要购买第 种饲料;
- 编号为 的动物的第 个二进制位为 ,因此需要购买第 种饲料。
由于在当前动物园中加入一种编号为 之一的动物,购物清单都不会改变,因此答案为 。
【数据范围】
对于 的数据,,,,所有的 互不相同。
对于 的数据,,,,。
对于 的数据,,,。
对于 的数据,,,。
策略游戏
题目描述
小 L 和小 Q 在玩一个策略游戏。
有一个长度为 的数组 和一个长度为 的数组 ,在此基础上定义一个大小为 的矩阵 ,满足 。所有下标均从 开始。
游戏一共会进行 轮,在每一轮游戏中,会事先给出 个参数 ,满足 、。
游戏中,小 L 先选择一个 之间的下标 ,然后小 Q 选择一个 之间的下标 。定义这一轮游戏中二人的得分是 。
小 L 的目标是使得这个得分尽可能大,小 Q 的目标是使得这个得分尽可能小。同时两人都是足够聪明的玩家,每次都会采用最优的策略。
请问:按照二人的最优策略,每轮游戏的得分分别是多少?
输入格式
第一行输入三个正整数 ,分别表示数组 ,数组 的长度和游戏轮数。
第二行: 个整数,表示 ,分别表示数组 的元素。
第三行: 个整数,表示 ,分别表示数组 的元素。
接下来 行,每行四个正整数,表示这一次游戏的 。
输出格式
输出共 行,每行一个整数,分别表示每一轮游戏中,小 L 和小 Q 在最优策略下的得分。
输入输出样例 #1
输入 #1
3 2 2
0 1 -2
-3 4
1 3 1 2
2 3 2 2
输出 #1
0
4
输入输出样例 #2
输入 #2
6 4 5
3 -1 -2 1 2 0
1 2 -1 -3
1 6 1 4
1 5 1 4
1 4 1 2
2 6 3 4
2 5 2 3
输出 #2
0
-2
3
2
-1
说明/提示
【样例解释 #1】
这组数据中,矩阵 如下:
$$\begin{bmatrix} 0 & 0 \\ -3 & 4 \\ 6 & -8 \end{bmatrix} $$在第一轮游戏中,无论小 L 选取的是 还是 ,小 Q 都有办法选择某个 使得最终的得分为负数。因此小 L 选择 是最优的,因为这样得分一定为 。
而在第二轮游戏中,由于小 L 可以选 ,小 Q 只能选 ,如此得分为 。
【样例 #3】
见附件中的 game/game3.in
与 game/game3.ans
。
【样例 #4】
见附件中的 game/game4.in
与 game/game4.ans
。
【数据范围】
对于所有数据,,。对于每轮游戏而言,,。
测试点编号 | 特殊条件 | |
---|---|---|
1, 2 | ||
1 | ||
2 | ||
无 | ||
1, 2 | ||
1 | ||
2 | ||
无 | ||
1, 2 | ||
1 | ||
2 | ||
无 |
其中,特殊性质 1 为:保证 。
特殊性质 2 为:保证对于每轮游戏而言,要么 ,要么 。
儒略日
题目描述
为了简便计算,天文学家们使用儒略日(Julian day)来表达时间。所谓儒略日,其定义为从公元前 4713 年 1 月 1 日正午 12 点到此后某一时刻间所经过的天数,不满一天者用小数表达。若利用这一天文学历法,则每一个时刻都将被均匀的映射到数轴上,从而得以很方便的计算它们的差值。
现在,给定一个不含小数部分的儒略日,请你帮忙计算出该儒略日(一定是某一天的中午 12 点)所对应的公历日期。
我们现行的公历为格里高利历(Gregorian calendar),它是在公元 1582 年由教皇格里高利十三世在原有的儒略历(Julian calendar)的基础上修改得到的(注:儒略历与儒略日并无直接关系)。具体而言,现行的公历日期按照以下规则计算:
- 公元 1582 年 10 月 15 日(含)以后:适用格里高利历,每年一月 天、 二月 天或 天、三月 天、四月 天、五月 天、六月 天、七月 天、八月 天、九月 天、十月 天、十一月 天、十二月 天。其中,闰年的二月为 天,平年为 天。当年份是 的倍数,或日期年份是 的倍数但不是 的倍数时,该年为闰年。
- 公元 1582 年 10 月 5 日(含)至 10 月 14 日(含):不存在,这些日期被删除,该年 10 月 4 日之后为 10 月 15 日。
- 公元 1582 年 10 月 4 日(含)以前:适用儒略历,每月天数与格里高利历相同,但只要年份是 的倍数就是闰年。
- 尽管儒略历于公元前 45 年才开始实行,且初期经过若干次调整,但今天人类习惯于按照儒略历最终的规则反推一切 1582 年 10 月 4 日之前的时间。注意,公元零年并不存在,即公元前 1 年的下一年是公元 1 年。因此公元前 1 年、前 5 年、前 9 年、前 13 年……以此类推的年份应视为闰年。
输入格式
第一行一个整数 ,表示询问的组数。
接下来 行,每行一个非负整数 ,表示一个儒略日。
输出格式
对于每一个儒略日 ,输出一行表示日期的字符串 。共计 行。 的格式如下:
- 若年份为公元后,输出格式为
Day Month Year
。其中日(Day)、月(Month)、年(Year)均不含前导零,中间用一个空格隔开。例如:公元 2020 年 11 月 7 日正午 12 点,输出为7 11 2020
。 - 若年份为公元前,输出格式为
Day Month Year BC
。其中年(Year)输出该年份的数值,其余与公元后相同。例如:公元前 841 年 2 月 1 日正午 12 点,输出为1 2 841 BC
。
输入输出样例 #1
输入 #1
3
10
100
1000
输出 #1
11 1 4713 BC
10 4 4713 BC
27 9 4711 BC
输入输出样例 #2
输入 #2
3
2000000
3000000
4000000
输出 #2
14 9 763
15 8 3501
12 7 6239
输入输出样例 #3
输入 #3
见附件中的 julian/julian3.in
输出 #3
见附件中的 julian/julian3.ans
说明/提示
【数据范围】
测试点编号 | ||
---|---|---|
年份答案不超过 |
函数调用
题目描述
函数是各种编程语言中一项重要的概念,借助函数,我们总可以将复杂的任务分解成一个个相对简单的子任务,直到细化为十分简单的基础操作,从而使代码的组织更加严密、更加有条理。然而,过多的函数调用也会导致额外的开销,影响程序的运行效率。
某数据库应用程序提供了若干函数用以维护数据。已知这些函数的功能可分为三类:
- 将数据中的指定元素加上一个值;
- 将数据中的每一个元素乘以一个相同值;
- 依次执行若干次函数调用,保证不会出现递归(即不会直接或间接地调用本身)。
在使用该数据库应用时,用户可一次性输入要调用的函数序列(一个函数可能被调用多次),在依次执行完序列中的函数后,系统中的数据被加以更新。某一天,小 A 在应用该数据库程序处理数据时遇到了困难:由于频繁而低效的函数调用,系统在执行操作时进入了无响应的状态,他只好强制结束了数据库程序。为了计算出正确数据,小 A 查阅了软件的文档,了解到每个函数的具体功能信息,现在他想请你根据这些信息帮他计算出更新后的数据应该是多少。
输入格式
第一行一个正整数 ,表示数据的个数。
第二行 个整数,第 个整数表示下标为 的数据的初始值为 。
第三行一个正整数 ,表示数据库应用程序提供的函数个数。函数从 编号。
接下来 行中,第 ()行的第一个整数为 ,表示 号函数的类型:
- 若 ,接下来两个整数 分别表示要执行加法的元素的下标及其增加的值;
- 若 ,接下来一个整数 表示所有元素所乘的值;
- 若 ,接下来一个正整数 表示 号函数要调用的函数个数,
随后 个整数 依次表示其所调用的函数的编号。
第 行一个正整数 ,表示输入的函数操作序列长度。
第 行 个整数 ,第 个整数表示第 个执行的函数的编号。
输出格式
一行 个用空格隔开的整数,按照下标 的顺序,分别输出在执行完输入的函数序列后,数据库中每一个元素的值。答案对 取模。
输入输出样例 #1
输入 #1
3
1 2 3
3
1 1 1
2 2
3 2 1 2
2
2 3
输出 #1
6 8 12
输入输出样例 #2
输入 #2
10
1 2 3 4 5 6 7 8 9 10
8
3 2 2 3
3 2 4 5
3 2 5 8
2 2
3 2 6 7
1 2 5
1 7 6
2 3
3
1 2 3
输出 #2
36 282 108 144 180 216 504 288 324 360
输入输出样例 #3
输入 #3
见附件中的 call/call3.in
输出 #3
见附件中的 call/call3.ans
说明/提示
【样例 #1 解释】
号函数功能为将 的值加一。 号函数功能为所有元素乘 。 号函数将先调用 号函数,再调用 号函数。
最终的函数序列先执行 号函数,所有元素的值变为 。
再执行 号函数时,先调用 号函数,所有元素的值变为 。再调用 号函数,所有元素的值变为 。
【数据范围】
测试点编号 | 其他特殊限制 | ||
---|---|---|---|
函数调用关系构成一棵树 | |||
无 | |||
不含第 类函数或不含第 类函数 | |||
无 | |||
函数调用关系构成一棵树 | |||
无 | |||
不含第 类函数或不含第 类函数 | |||
无 | |||
函数调用关系构成一棵树 | |||
无 | |||
对于所有数据:,,,,,。