蓝桥杯2022年第十三届决赛真题-小球称重
admin
2024-01-20 19:10:45
0

题目描述

小蓝有 N 个小球,编号 1 至 N。其中 N − 1 是正品,重量相同;有 1 个是次品,重量比正品轻。

为了找出次品,小蓝已经用天平进行了 M 次称重,并且记录下来每次两边放的小球编号,和称重结果。

请你根据记录,判断还剩下几个小球有次品的嫌疑。

输入格式

第一行包含 2 个整数 N 和 M。

以下包含 M 次称重记录,每个记录占 4 行。

第一行是一个整数 K,表示天平两边各放了 K 个小球。

第二行包含 K 个整数,代表放在天平左边的小球编号。

第三行包含 K 个整数,代表放在天平右边的小球编号。

第四行是一个字符,为 ‘>’, ‘<’, ‘=’ 之一。‘>’ 代表左边比右边重,‘<’ 代表左边比右边轻,‘=’ 代表两边重量相等。

在一次称重中保证每个小球最多出现 1 次。

输出格式

输出一个整数,代表答案。

样例输入

10 2
3
1 2 3
4 5 6
<
2
3 7
8 9

=

样例输出

2

思路:自己写的代码实在不会优化了,还是超时。先说下思路,思路绝对没问题,因为我看见有人用了这个思路过了,除了我没用三元运算符,其他的都差不多。次品小球轻,那么每次对比,那方比较轻,次品就在那一堆里面。一开始会想,遍历一遍,看看轻的那一份有几个小球就行了。但要考虑到放的小球是否之前已经放过,还有假设称重的结果全部都为等于,那得出的结果就是0,这是明显不对的, 最后,假设我们有这样一个样例
10 3
3
1 2 3
4 5 6
<
2
3 7
8 9

=
1
1
10
<

先梳理一下,称重第一次,次品在1 2 3中,称重第二次,等于,都是正品。称重第三次,1是次品。若我们只看轻的那一方的数量,结果为3而不是一,也就是因为第三次称重影响了第一次称重的结果。
因为1轻,所以可以证明第一次称重中 2 3不是次品。
思路清晰了。
代码晾上

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;public class Main {static int N =  2000005;static int mod = 1000000007;static Map map = new HashMap<>();static Map map2 = new HashMap<>();static int cnt=0;static int n=0;static int sum=0;static boolean flag = false;static double res = 9999999;static int a[] = new int[N];static int b[] = new int[N];static int dirx[] ={-1,0,1,0};static int diry[] ={0,1,0,-1};static Set set = new TreeSet<>();public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n =sc.nextInt();int m=sc.nextInt();for(int i=0;iint k = sc.nextInt();for(int j=0;jfor(int j=0;jset.add(a[j]);set.add(b[j]);}}else{if(str.equals(">")){for(int j=0;jset.add(a[j]);map.put(b[j], map.getOrDefault(b[j], 0)+1);}}else{for(int j=0;jset.add(b[j]);map.put(a[j], map.getOrDefault(a[j], 0)+1);}}++cnt;}}for(Map.Entry entry :map.entrySet()){if(!set.contains(entry.getKey())&&entry.getValue()==cnt)++sum;}if(sum==0){System.out.print(n-set.size());}elseSystem.out.println(sum);sc.close();}BufferedReader in = new BufferedReader(new InputStreamReader(System.in));StringTokenizer tok;String next() {while (tok == null || !tok.hasMoreTokens())try {tok = new StringTokenizer(in.readLine());} catch (IOException e) {e.printStackTrace();}return tok.nextToken();}int nextInt() { return Integer.parseInt(next()); }char nextChar() { return next().charAt(0); }
}

相关内容

热门资讯

安卓系统的模拟吉他,随时随地弹... 你有没有想过,在手机上也能弹奏吉他呢?没错,就是那种模拟吉他的安卓系统应用,让你随时随地都能享受音乐...
王者适配的安卓系统,深度解析适... 你有没有发现,最近玩《王者荣耀》的小伙伴们都在议论纷纷,说新出的安卓系统简直是为王者量身定做的!没错...
安卓系统自动定位关闭,隐私保护... 你有没有发现,手机里的安卓系统有时候会自动定位,这可真是让人又爱又恨啊!有时候,我们并不想让别人知道...
安卓系统电量耗尽测试,全面解析... 手机电量耗尽,这可是每个手机用户都头疼的问题。你有没有想过,你的安卓手机在电量耗尽前,到底经历了哪些...
如何升级车载安卓系统,车载安卓... 亲爱的车主朋友们,你是不是也和我一样,对车载安卓系统升级这件事充满了好奇和期待呢?想象当你驾驶着爱车...
安卓办公哪个系统好,深度解析哪... 你有没有想过,在安卓办公的世界里,哪个系统才是你的最佳拍档呢?在这个信息爆炸的时代,选择一个既强大又...
安卓系统差劲怎么解决,重拾流畅... 你有没有发现,安卓系统有时候真的让人头疼得要命?手机卡顿、应用崩溃、电池续航短,这些问题是不是让你抓...
喜欢安卓系统的原因,探索用户偏... 你有没有发现,身边的朋友、同事,甚至家人,越来越多的人开始使用安卓手机了呢?这可不是简单的潮流,而是...
安卓系统金立手机,品质生活新选... 你有没有发现,最近安卓系统下的金立手机突然火了起来?没错,就是那个曾经陪伴我们走过无数时光的金立手机...
无安卓系统的电视,新型无系统电... 亲爱的读者们,你是否厌倦了那些充斥着安卓系统的电视?想要尝试一些新鲜玩意儿?那就跟我一起探索一下无安...
麒麟系统能刷安卓系统吗,轻松刷... 你有没有想过,你的麒麟手机能不能装上安卓系统呢?这可是个让人好奇不已的问题。现在,就让我来带你一探究...
手机公司安卓系统吗,手机公司引... 你有没有想过,为什么你的手机里装的是安卓系统而不是苹果的iOS呢?这背后可是有着不少故事和门道的哦!...
安卓系统 文件网络传输,安卓系... 你有没有想过,手机里的文件怎么才能轻松地传给朋友呢?今天,就让我来给你揭秘安卓系统中的文件网络传输技...
安卓手机系统怎样备份,安卓手机... 你有没有想过,如果你的安卓手机突然“罢工”了,里面的照片、联系人、应用和数据怎么办?别担心,今天就来...
安卓系统怎样分享app,安卓系... 你是不是也和我一样,手机里装了超多好用的APP,但是有时候想和朋友分享这些宝藏,却不知道怎么操作呢?...
sonicarekids安卓系... 最近是不是你也遇到了Sonicare Kids安卓系统打不开的烦恼?别急,让我来帮你一探究竟,找出解...
安卓刷mac系统教程,体验全新... 你有没有想过,让你的安卓手机也来个华丽变身,摇身一变成为一台Mac电脑呢?别惊讶,这可不是天方夜谭,...
安卓系统根目录删除,深度揭秘删... 你有没有遇到过这种情况:手机里的安卓系统突然出了点小状况,比如不小心点错了某个按钮,结果发现根目录里...
怎么在安卓系统装windows... 你是不是也和我一样,对安卓手机的强大性能爱不释手,但又时不时地想念Windows系统的熟悉界面和那些...
kindle安卓系统壁纸设置,... 亲爱的Kindle用户,你是否曾为你的Kindle设备挑选过一款心仪的壁纸呢?今天,就让我带你一起探...