CF1579D.Productive Meeting

普及/提高-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

An important meeting is to be held and there are exactly nn people invited. At any moment, any two people can step back and talk in private. The same two people can talk several (as many as they want) times per meeting.

Each person has limited sociability. The sociability of the ii-th person is a non-negative integer aia_i. This means that after exactly aia_i talks this person leaves the meeting (and does not talk to anyone else anymore). If ai=0a_i = 0, the ii-th person leaves the meeting immediately after it starts.

A meeting is considered most productive if the maximum possible number of talks took place during it.

You are given an array of sociability aa, determine which people should talk to each other so that the total number of talks is as large as possible.

一场重要会议即将召开,恰好有 nn 人被邀请出席。在任意时刻,任意两人均可暂时退至一旁进行私下交谈。同一对人可在会议期间多次(次数不限)交谈。

每个人的社会交往能力有限。第 ii 个人的社会交往能力是一个非负整数 aia_i,表示该人在恰好参与 aia_i 次交谈后即离开会议(此后不再与任何人交谈)。若 ai=0a_i = 0,则第 ii 个人在会议一开始便立即离场。

当会议期间发生的交谈总次数达到最大可能值时,该会议被视为“最具成效”。

现给定社会交往能力数组 aa,请确定哪些人之间应进行交谈,使得交谈总次数尽可能大。

输入格式

The first line contains an integer tt (1≤t≤10001 \le t \le 1000) — the number of test cases.

The next 2t2t lines contain descriptions of the test cases.

The first line of each test case description contains an integer nn (2≤n≤2⋅1052 \le n \le 2 \cdot 10^5) —the number of people in the meeting. The second line consists of nn space-separated integers a1,a2,…,ana_1, a_2, \dots, a_n (0≤ai≤2⋅1050 \le a_i \le 2 \cdot 10^5) — the sociability parameters of all people.

It is guaranteed that the sum of nn over all test cases does not exceed 2⋅1052 \cdot 10^5. It is also guaranteed that the sum of all aia_i (over all test cases and all ii) does not exceed 2⋅1052 \cdot 10^5.

第一行包含一个整数 tt(1≤t≤10001 \le t \le 1000)——测试用例的数量。

接下来的 2t2t 行包含各测试用例的描述。

每个测试用例描述的第一行包含一个整数 nn(2≤n≤2⋅1052 \le n \le 2 \cdot 10^5)——会议中的人数。第二行包含 nn 个以空格分隔的整数 a1,a2,…,ana_1, a_2, \dots, a_n(0≤ai≤2⋅1050 \le a_i \le 2 \cdot 10^5)——所有人的社交性参数。

保证所有测试用例的 nn 之和不超过 2⋅1052 \cdot 10^5。同时保证所有测试用例中所有 aia_i 的总和(对所有测试用例及所有 ii 求和)不超过 2⋅1052 \cdot 10^5。

输出格式

Print tt answers to all test cases.

On the first line of each answer print the number kk — the maximum number of talks possible in a meeting.

On each of the next kk lines print two integers ii and jj (1≤i,j≤n1 \le i, j \le n and i≠ji \neq j) — the numbers of people who will have another talk.

If there are several possible answers, you may print any of them.

输出所有测试用例的 tt 个答案。

在每个答案的第一行,输出整数 kk —— 会议中可能进行的最大报告对数。

接下来的 kk 行中,每行输出两个整数 ii 和 jj(满足 1≤i,j≤n1 \le i, j \le n 且 i≠ji \neq j)—— 表示将进行另一场报告的两个人的编号。

若存在多种可能的答案,输出任意一种即可。

输入输出样例

  • 输入#1

    8
    2
    2 3
    3
    1 2 3
    4
    1 2 3 4
    3
    0 0 2
    2
    6 2
    3
    0 0 2
    5
    8 2 0 1 1
    5
    0 1 0 0 6

    输出#1

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

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

首页