CF166D.Shoe Store

省选/NOI-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

The warehouse in your shop has n shoe pairs. Each pair is characterized by two integers: its price c__i and its size s__i. We know that on this very day all numbers s__i are different, that is, there is no more than one pair of each size.

The shop has m customers who came at the same time. The customer number i has d__i money and the size of his feet equals l__i. The customer number i can buy the pair number j, if c__j ≤ d__i, and also if l__i = s__j or l__i = s__j - 1; that is, it is necessary that he has enough money to pay for the shoes. It is also necessary that the size of his feet equals to or is less by 1 than the size of the shoes he chooses.

Your task is to sell some customers pairs of shoes (a pair per person) so as to maximize the sum of the sold pairs c__j that is, the profit. It is guaranteed that each customer buys no more than one pair and each pair will be bought by no more than one customer.

你们商店的仓库中有 nn 双鞋。每双鞋由两个整数刻画:价格 cic_i 和尺码 sis_i。已知当天所有 sis_i 互不相同,即每种尺码至多只有一双鞋。

当天共有 mm 位顾客同时到店。第 ii 位顾客有 did_i 元钱,脚长为 lil_i。第 ii 位顾客可以购买第 jj 双鞋,当且仅当满足 cj≤dic_j \leq d_i,且 li=sjl_i = s_j 或 li=sj−1l_i = s_j - 1;即:他必须有足够的钱支付该双鞋的费用,且他脚长必须恰好等于该鞋尺码,或比该鞋尺码小 11。

你的任务是向部分顾客出售鞋(每位顾客至多买一双,每双鞋至多被一位顾客购买),使得所售鞋的价格总和(即总利润)最大化。

输入格式

The first input line contains the only integer n (1 ≤ n ≤ 105) — the number of shoe pairs in the warehouse. Then n lines contain the descriptions of pairs of shoes as two integers c__i and s__i (1 ≤ c__i, s__i ≤ 109), the numbers are separated by a space. It is guaranteed that all numbers s__i are different.

The next line contains an integer m (1 ≤ m ≤ 105) — the number of customers in the shop. Next m lines contain the customers' descriptions as two integers d__i and l__i (1 ≤ d__i, l__i ≤ 109), the numbers are separated by a space.

第一行输入包含一个整数 nn(1≤n≤1051 \leq n \leq 10^5)—— 仓库中鞋对的数量。接下来的 nn 行每行包含一对鞋的描述,由两个整数 cic_i 和 sis_i(1≤ci,si≤1091 \leq c_i, s_i \leq 10^9)组成,两数之间以空格分隔。保证所有 sis_i 均互不相同。

接下来一行包含一个整数 mm(1≤m≤1051 \leq m \leq 10^5)—— 商店中顾客的数量。随后的 mm 行每行包含一位顾客的描述,由两个整数 did_i 和 lil_i(1≤di,li≤1091 \leq d_i, l_i \leq 10^9)组成,两数之间以空格分隔。

输出格式

In the first line print the only integer — the maximum profit you can get from selling shoes. In the second line print an integer k — the number of shoe pairs you will sell. In the following k lines print the descriptions of the sold pairs — two space-separated integers where the first number is the customer's number and the second number is the number of the shoes the customer will buy.

You can print pairs of numbers "the customer's number and the shoes' number" in any order, the customers and the pairs of shoes are numbered starting from 1 in the order in which they are given in the input. If there are several optimal answers, you are allowed to print any of them.

Please do not use the %lld specificator to read or write 64-bit numbers in С++. It is preferred to use the cin, cout streams or the %I64d specificator instead.

第一行输出一个整数——出售鞋子所能获得的最大利润。
第二行输出一个整数 kk——你将售出的鞋对数量。
接下来的 kk 行中,每行输出一对用空格分隔的整数:第一个数为客户编号,第二个数为该客户所购买的鞋子编号。

你可以以任意顺序输出“客户编号与鞋子编号”这对数字;客户和鞋子均从 1 开始编号,编号顺序与其在输入中出现的顺序一致。若存在多个最优解,输出其中任意一个即可。

请注意:在 C++ 中,请勿使用 %lld 格式说明符读写 64 位整数。推荐使用 cin / cout 流,或使用 %I64d 格式说明符。

输入输出样例

  • 输入#1

    3
    10 1
    30 2
    20 3
    2
    20 1
    20 2

    输出#1

    30
    2
    2 3
    1 1
  • 输入#2

    3
    10 4
    20 5
    30 6
    2
    70 4
    50 5

    输出#2

    50
    2
    2 3
    1 2

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

首页