CF1090C.New Year Presents

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

圣诞老人已经为 nn 个孩子准备好了装有礼物的盒子,每个孩子一个盒子。有 mm 种不同的礼物:气球、糖果、巧克力棒、玩具车……每个孩子如果收到两个相同种类的礼物会感到失望,因此每个盒子里的礼物种类都必须各不相同。

在打包完所有礼物后,圣诞老人发现不同的盒子里礼物的数量可能不同。这样对孩子们来说不公平,于是他决定在盒子之间移动一些礼物,使得每个盒子里的礼物数量尽量接近。所有移动完成后,任意盒子中礼物数量的最大值与最小值之差应尽可能小。每个盒子中的礼物种类仍需各不相同。圣诞老人希望尽快完成这项工作,因此他想让所需移动的次数尽量少。

给定每个盒子中礼物的种类,请找出一种最短的移动方案,使得所有盒子中礼物数量的最大值与最小值之差不超过 11,并且每个盒子中的礼物种类各不相同。

输入格式

输入的第一行包含两个整数 nn 和 mm(1≤n,m≤100 0001 \leq n, m \leq 100\,000),分别表示盒子的数量和礼物种类的数量。礼物用 11 到 mm 的整数表示。

接下来的 nn 行,每行描述一个盒子。每行以一个整数 sis_i(si≥0s_i \geq 0)开头,表示该盒子中礼物的数量,接下来是 sis_i 个不同的整数,表示该盒子中礼物的种类,范围为 11 到 mm。

所有盒子中的礼物总数不超过 500 000500\,000。

输出格式

输出的第一行包含一个整数 kk,表示最短移动序列的步数,使得所有盒子中礼物数量的最大值与最小值之差不超过 11。接下来的 kk 行,每行描述一次移动,包含三个整数 fromifrom_i、toito_i、kindikind_i,表示将编号为 fromifrom_i 的盒子中的 kindikind_i 号礼物移动到编号为 toito_i 的盒子中。盒子的编号按照输入顺序从 11 开始。

在每次移动时,fromifrom_i 盒子中必须有 kindikind_i 号礼物。所有移动完成后,每个盒子中不能有两个相同种类的礼物。

如果有多种最优方案,输出任意一种即可。

输入输出样例

  • 输入#1

    3 5
    5 1 2 3 4 5
    2 1 2
    2 3 4
    

    输出#1

    2
    1 3 5
    1 2 3
    

说明/提示

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页