QOJ.ac

QOJ

Limite de temps : 1 s Limite de mémoire : 128 MB Points totaux : 100

#11060. 黑手党

Statistiques

赤道拜托尼亚(Equatorial Byteotia)正爆发着黑帮火拼。黑帮头目们来到该国首都拜特堡(Byteburg)解决争端。谈判气氛十分紧张,一度有参与者拔枪相向。每位参与者都用手枪瞄准了另一人。如果他们真的开始火拼,射击将遵循以下荣誉准则:

  • 参与者按特定顺序射击,且在任何时刻最多只有一人在射击;
  • 没有射手会脱靶,目标会立即死亡,因此该目标之后无法再进行射击;
  • 每个人都有一次射击机会,前提是他在轮到自己射击前没有被击中;
  • 任何参与者不得更改其最初选择的目标,即使目标已经死亡(此时射击不会造成额外伤亡)。

一名殡仪员在远处观察着这一切,正如他往常所做的那样。毕竟,黑帮分子从未让他失去生意。他从这场枪战中看到了潜在的利润,但他想得到精确的估算。具体来说,他想知道伤亡人数的最小值和最大值。殡仪员看到了谁瞄准了谁,但不知道射击的顺序。你需要编写一个程序来确定他急于想知道的这两个数字。

编写一个程序:

  • 从标准输入读取每位黑帮成员选择的目标;
  • 确定伤亡人数的最小值和最大值;
  • 将结果输出到标准输出。

输入格式

标准输入的第一行包含参与者人数 $n$ ($1 \le n \le 1\,000\,000$)。参与者编号从 $1$ 到 $n$。第二行包含 $n$ 个整数 $s_1, s_2, \dots, s_n$,由空格分隔,$1 \le s_i \le n$。$s_i$ 表示第 $i$ 位参与者瞄准的目标编号。注意,对于某些 $i$,可能存在 $s_i=i$ 的情况(毕竟神经紧张嘛)。

输出格式

你的程序应在标准输出的第一行(也是唯一一行)输出两个由空格分隔的整数。这两个数字分别应为枪战造成的最小伤亡人数和最大伤亡人数。

样例

输入 1

8
2 3 2 2 6 7 8 5

输出 1

3 5

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.