这个题就是看着题目老长,看着吓人,其实不难,核心就是:
- 把两个序列用数组装起来
- 把R序列去重并排序
- 把R序列中的每一项与I序列的每一项进行对比,保存包含R序列项的I序列的数字和下标,最后统计符合条件的I序列的个数
- 统计所有输出项的个数,并在第一位输出
while(str=readline()){ //当能读取输入的时候进入循环
let IArr=str.split(' '); //拆分得到I序列
let RArr=readline().split(' '); //拆分得到R序列
IArr.shift(); //删除数组第一位,下同
RArr.shift();
RArr=[...new Set(RArr.sort((a,b)=>a-b))]; //利用Set去重,同时排序,重新赋值给RArr
let log=[]; //定义输出数组
RArr.forEach(item=>{ //对R序列的每一项
let itemArr=[] //定义临时数组
for(let i=0;i<IArr.length;i++){
if(IArr[i].includes(item)){ //查找包含R单项的I序列项
itemArr.push(i,IArr[i]); //若找到,在临时数组中保存下标和I序列单项
}
}
if(itemArr.length!==0){ //如果临时数组长度大于0
log.push(item,itemArr.length/2,...itemArr); //输出数组中加入R单项,I序列中符合条件的个数,并把保存的临沭数组扩展进来
}
})
log.unshift(log.length) //统计输出数组的长度,并将该数字添加到输出数组的第一位
console.log(log.join(' '))
}