语法周赛round26
T1¶
给定:
- ICPC:从 $a$ 年开始(含 $a$ 年),每年举办 $b$ 场;
- CCPC:从 $c$ 年开始(含 $c$ 年),每年举办 $d$ 场;
- 询问猪历 $x$ 年,这一年两个比赛系列共举办多少场。
只需要判断该年是否已经开始举办对应赛事:
- 若 $x \ge a$,ICPC 在该年举办 $b$ 场,否则为 $0$;
- 若 $x \ge c$,CCPC 在该年举办 $d$ 场,否则为 $0$。
实现流程
- 输入 $a,b,c,d,x$
- 将答案变量初始化为 $0$
- 如果 $x \ge a$,令答案加上 $b$
- 如果 $x \ge c$,令答案加上 $d$
- 输出最终答案
T2¶
思路解析
四支队伍为 $A,B,C,D$,在两场比赛中的排名分别为:
- 第一场:$A_1,B_1,C_1,D_1$
- 第二场:$A_2,B_2,C_2,D_2$
我们要统计有多少对 $(x,y)$ 满足:
- 在第一场中:$x$ 的排名小于 $y$ 的排名
- 在第二场中:$x$ 的排名大于 $y$ 的排名
若成立,则这对队伍为一对“旗鼓相当的对手”。
四支队伍为 $A,B,C,D$,取所有不重复的无序队伍对 $(x,y)$,一共正好 $6$ 对,具体如下:
\[
(A,B),\quad (A,C),\quad (A,D),\quad (B,C),\quad (B,D),\quad (C,D)
\]
这六对逐一检查即可。
实现流程
- 读入 $A_1,B_1,C_1,D_1$ 和 $A_2,B_2,C_2,D_2$
- 将队伍编号设为数组下标,存入两场比赛的排名
- 定义答案变量
ans = 0 - 利用 $6$ 个
if语句检查所有无序对 $(x,y)$。若成立则ans++。 - 输出
ans
int count = 0;
// 检查 A 和 B
if ((A1 < B1 && A2 > B2) || (A1 > B1 && A2 < B2)) count++;
// 检查 A 和 C
if ((A1 < C1 && A2 > C2) || (A1 > C1 && A2 < C2)) count++;
// 检查 A 和 D
// ... (类似地检查其他队伍对)
T3¶
思路解析
题目给出了一个队伍对所有题目的 有效提交记录,每条记录包含:
- 提交时间 $a_i$
- 提交结果 $b_i$($0$ 表示未通过,$1$ 表示通过)
由于所有提交记录都是“有效提交”,因此满足:
- 同一道题目的最后一次有效提交一定是通过
- 之前的有效提交一定是未通过
同时,题目特别说明: 虽然罚时按题目划分定义,但最终计算总罚时时不需要区分题号。
因此,每条提交记录都可以看作“属于某题的一次有效提交”,而每次 $b_i = 1$,代表某一道题通过,其罚时贡献为:
\[
a_i + 20 \times (\text{该题此前的未通过数})
\]
我们需要求所有题的总罚时。
实现流程
- 定义答案变量
long longans = 0 - 读入 $n$ 条比赛记录
- 当 $b=1$ 时,将
ans += a。 - 否则,将
ans += 20。 - 输出
ans。
T4¶
思路解析
题目给出了每道题目的所有 有效提交记录,每条记录为:
0:未通过1:通过
对于第 $i$ 道题:
- 有效提交总数为 $a_i$
- 其中通过次数为 $y$
- 未通过次数为 $x - y$
根据定义,该题的 dirt 率为:
\[
\mathrm{dirt}(i) = \frac{a_i - y}{a_i}
\]
因此,我们只需统计每行中 $1$ 的个数即可。
实现流程
- 输入 $n$:题目数量
- 对每道题重复以下步骤:
- 读入 $a_i$
- 读入接下来的 $a_i$ 个数字
- 统计其中 $1$ 的个数,记为 $y$
- 计算:
\[
\text{ans} = \frac{a_i - y}{a_i}
\]
- 输出结果(自行控制小数位数,推荐输出至少 3 位以上小数)
- 所有结果各占一行
T5¶
题目分析
- 给定一支队伍的提交记录,共有 $n$ 条,每条包含题目编号 $pid$ 和状态 $state$($0$ 表示未通过,$1$ 表示通过);
- 题目数量为 $p$;
- 我们需要统计这支队伍最终通过了多少道不同的题目;
- 只有在第一次成功通过某题时,提交才是有效,之后即使该题再次通过,也不算新的通过。
解题思路
- 使用一个布尔数组(或整型数组)
passed长度为 $1005$,用于标记每道题是否已经被通过; - 初始化所有题目状态为未通过(全局数组自动初始化均为
0); - 逐条遍历提交记录:
- 如果当前提交状态为通过 ($state = 1$) ,则将对应的题目编号标记为通过(
1); - 无需判断每道题是否是第一次成功通过,反正过了就算 $1$ 次,标记为 $1$ 即可。
- 如果当前提交状态为通过 ($state = 1$) ,则将对应的题目编号标记为通过(
- 最终统计
passed中为1的题目个数即为答案。
实现步骤
- 读入 $n, p$;
- 定义全局变量
bool passed[1005]数组,给每道题是否通过打标记; - 对 $n$ 条提交依次读取
pid, state,用两个变量一边输入一边做即可:- 若
state == 1,则将passed[pid] = 1;
- 若
- 统计并输出
passed数组中passed[1]$\sim$passed[p]中 $1$ 的数量。