QOJ.ac

QOJ

حد الوقت: 2 s حد الذاكرة: 1024 MB مجموع النقاط: 100 قابلة للهجوم ✓

#14071. 数据竞争

الإحصائيات

你有 $T$ 个线程正在向一个包含 $N$ 个位置的循环数据结构(每个位置存储一个整数)中写入数据,所有线程每秒写入 $1$ 个整数。每个线程 $i$ 从时间 $t_i$ 开始,从数据结构中的位置 $p_i$ 开始写入,并连续写入 $v_i$ 个整数 $a_i$。线程将按顺序写入每个位置(从 $p_i$ 开始,然后写入 $(p_i + 1)\%N$,$(p_i + 2)\%N$,依此类推)。如果到达索引 $N - 1$,由于数据结构是循环的,下一个索引将是 $0$。如果两个或多个线程在同一时间尝试向同一位置写入不同的整数,则会发生竞争条件(race condition),这意味着该位置的值是不确定的,因为根据哪个线程成功执行了写入操作,它可能是多个值之一。然而,如果所有线程在同一时间向同一位置写入相同的值 $v$,由于没有歧义,该位置的值将为 $v$。

例如,在第一个样例中,数据结构的最终结果是 $\{1, 0, 1, 1, 0\}$。尽管线程 2 和线程 3 在同一时间写入相同的位置,但这不会引起竞争条件,因为它们写入了相同的整数。另一方面,在第二个样例中,数据结构的最终结果是 $\{1, 0, ?, ?, 0\}$,其中 ? 表示不确定的字符,因为两个线程在同一时间向同一位置写入了不同的字符。

线程可以写入的值在区间 $[0, A)$ 内。在所有线程写入结束后,对于每个整数 $i \in [0, A)$,设其在数据结构中出现的次数为 $k_i$。已知在任何线程开始写入之前,数据结构中的每个位置都初始化为 $0$。请按顺序输出所有的 $k_i$,并在最后输出不确定字符的数量。

输入格式

输入的第一行包含三个空格分隔的整数 $T$($1 \le T \le 50\,000$)、$N$($1 \le N \le 10^9$)和 $A$($1 \le A \le 100\,000$)。它们分别代表线程的数量、循环数据结构的大小以及线程可以写入数据结构的整数个数。

接下来的 $T$ 行,每行包含四个空格分隔的整数 $t_i$($0 \le t_i \le 10^9$)、$p_i$($0 \le p_i < N$)、$v_i$($1 \le v_i \le 10^9$)和 $a_i$($0 \le a_i < A$)。它们分别代表线程 $i$ 开始写入的时间、开始写入的位置、写入的值的数量以及写入每个位置的数值。每个线程每秒写入 $1$ 个整数。

输出格式

输出 $A + 1$ 个空格分隔的数字 $k_0\ k_1\ \dots\ k_{A-1}\ k_?$。其中 $k_i$ 代表在所有线程结束写入后,数字 $i$ 在数据结构中出现的次数(对于 $0 \le i < A$)。$k_?$ 代表在所有线程结束写入后,不确定字符在数据结构中出现的次数。

样例

输入样例 1

3 5 2
0 0 1 1
1 2 2 1
1 2 2 1

输出样例 1

2 3 0

输入样例 2

3 5 2
0 0 1 1
1 2 2 0
1 2 2 1

输出样例 2

2 1 2

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.