有两排石头,每排n颗,从左到右依次排开,每颗石头的颜色为黄色或者绿色。每次可以选择第一排的任意一颗石头与第二排的任意一颗石头交换位置。请计算最少需要交换多少次才能使每一列石头的颜色都相同;如果无论交换多少次都无法使每一列石头的颜色都相同,则输出-1。 例如:n=3,每排3颗石头;第一排3颗石头的颜色从左到右依次是黄、绿、绿: 第二排3颗石头的颜色从左到右依次是绿、绿、黄: 其中一种最少交换次数的方案如下: 1) 先将第一排的第 3 颗石头与第二排的第 3 颗石头交换位置; 2) 再将第一排的第 3 颗石头与第二排的第1颗石头交换位置。 此时每一列石头的颜色都相同,故至少需要交换2次。 输入格式 本题每个测试点包含多组测试数据第一行包含一个整数 T(1≤T≤300),表示数据组数接下来T组数据,每组数据第一行输入一个整数n(1≤n≤104),表示每排石头的数量; 第二行输入 n个整数,整数只能为1或 0,1表示黄色,0 表示绿色,表示第一排从左到右每颗石头的颜色,整数之间以一个空格隔开; 第三行输入 n个整数,整数只能为1或0,1表示黄色,0表示绿色,表示第二排从左到右每颗石头的颜色,整数之间以一个空格隔开。 输入样例 2 3 1 0 0 0 0 1 5 1 0 1 0 1 0 1 0 1 0 输出样例 2 -1




正确答案:统计两排中1的总数,若为奇数输出-1。设a为(上=1,下=0)的列数,b为(上=0,下=1)的列数。答案=a//2+b//2+(a%2)*2:同类错位列两列跨排交换一次即可同时修复;剩余一(1,0)一(0,1)需2次。
试卷来源:202409(第15届)蓝桥杯C++编程青少组(国赛_中高级)真题