玩具分类
题号:NC318639
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

牛魔王有一个玩具桶。

玩具桶的顶部有 m 个长方形孔,编号依次为 1, 2, ..., m。小 A 还有 n 个需要收纳的长方形玩具,编号依次为 1, 2, ..., n

每个孔和玩具均属于以下四种类型之一:

S 方块 1 : 1
D 骨牌 1 : 2
R 长砖 2 : 3
B 宽砖 3 : 4

通常,人们会将玩具放入类型相同的孔中。但是,小 A 并不在意玩具与孔的类型是否相同。只要玩具能够穿过某个孔,就可以将它放入桶中。同一个孔可以放入任意多个玩具。对于每一个玩具,请选择一个能够让它通过的孔。


图形的描述方式

每个孔和玩具均使用一个字符 s 和一个正整数 c 描述,格式为 s c

其中 s 表示类型,c 表示周长。根据类型和周长,可以唯一确定图形的两条边:

  • S 两条边均为 c / 4
  • D 短边 c / 6,长边 c / 3
  • R 短边 c / 5,长边 3 * c / 10
  • B 短边 3 * c / 14,长边 2 * c / 7

题目保证输入数据能够使图形的两条边均为正整数。


放入规则

将玩具放入桶中之前,小 A 可以在桶盖平面内将玩具旋转若干次。每次旋转的角度必须恰好为 90 度。

设玩具的两条边分别为 a, b,孔的两条边分别为 x, y。如果以下两个条件之一成立,则玩具可以通过该孔:

a <= x 且 b <= y

或:

a <= y 且 b <= x

第二种情况表示将玩具旋转 90 度后放入孔中。


数据范围

对于全部测试数据:

1 <= t <= 104
4 <= m <= 2 × 105
1 <= n <= 2 × 105

所有测试用例中,m + n 的总和不超过:

2 × 105

对于每一个孔和玩具:

1 <= c <= 109

字符 s 一定是 SDRB 中的一个。

对于每组测试数据,四种类型的孔均至少存在一个。

记所有玩具周长中的最大值为 P,记所有孔周长中的最大值为 C。题目保证:

2 × C >= 3 × P

除上述限制外,孔和玩具的类型、大小以及排列顺序没有额外限制。

没有思路?点击左边的小三角展开随机玩具桶玩一下吧!
🧸 玩具桶


📦 收纳完成
```

输入描述:

第一行包含一个整数 t ,表示测试用例的数量。
对于每组测试用例:
第一行包含两个整数 m, n ,分别表示孔的数量和玩具的数量。
接下来 m 行,每行包含一个字符 s 和一个正整数 c,描述一个孔。
接下来 n 行,每行包含一个字符 s 和一个正整数 c ,描述一个玩具。

输出描述:

对于每组测试用例:
如果不存在合法的分类方案,输出一行 -1
否则,输出一行 n个整数 a_1 , a_2 , \cdots , a_n
其中,a_i 表示第 i 个玩具通过编号为 a_i 的孔放入桶中。
每一个编号均需要满足:
1 \leq a_i \leq m
如果存在多种合法方案,你可以输出任意一种。
本题使用 Special Judge。
示例1

输入

复制
1
6 4
S 20
D 60
R 30
B 28
S 40
D 36
S 24
D 24
R 30
B 28

输出

复制
2 4 3 4

说明

可以验证,样例输出是一种合法方案。
答案可能不唯一。
注意,由于答案不唯一,自测功能可能会返回错误答案