链接:https://ac.nowcoder.com/acm/contest/5278/H
来源:牛客网
题目描述
Cubercsl 和 Oneday 在玩一个纸牌游戏。两个人手中都有 n 张数字牌,每张牌面上都包含 0 sim 90∼9 其中一个阿拉伯数字。
游戏规则是需要将手中的牌选出恰好 k 张,组成一个能被 3 整除的非负整数(不能含有多余前导零),组成的数大的获胜。
Cubercsl 自然是想取得胜利,所以他需要找到符合条件的最大的数。
输入描述:
第一行包含一个整数 T (T leq 1000T≤1000),表示测试数据的组数。
对于每组测试数据,包含一个数字构成的串 s (1 leq |s| leq 10 ^ 51≤∣s∣≤105
) 和一个整数 k (1 leq k leq |s|1≤k≤∣s∣),中间以空格分隔,分别表示 Cubercsl 手中的牌和要选出的牌的数量。
输入保证 sum |s| < 10 ^ 6∑∣s∣<10 6 。
输出描述:
对于每组测试数据,在一行输出一个整数,表示最大的能被 3 整除的数。特别地,如果无解,输出 -1。
示例1
输入
输出
示例2
输入
输出
两个多月没写题,一题写了一下午。。。题意理解错了一直差一点对,写了正解试数据才发现的。
题目说组成的数不能含前导0,我一直以为组成的数可以是多个0,答案输出一个0就可以了,但是这样不行,只有k为1的时候输出一个0才对,语文是我的硬伤,哎。
总体来说难度适中,从大到小的搜索,每个数可以少0次,1次,2次,因为少三次就是3的倍数了,再少也没有意义,第一遍写没发现出来,写完超时了发现的规律。
开始写的比较臃肿,后来一直改不对就看着别人的再写了一遍,比较简洁。思路和我开始的差不多,函数的循环感觉比我的要好。
我写的