首页 > 试题广场 >

数据分类处理

[编程题]数据分类处理
  • 热度指数:164098 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码、 QQ 用户、手机号码、银行帐号等信息及活动记录。

采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出。

数据范围: ,输入的整数大小满足

输入描述:

一组输入整数序列I和一组规则整数序列RIR序列的第一个整数为序列的个数(个数不包含第一个整数);整数范围为0~(2^31)-1,序列个数不限



输出描述:

R依次中取出R<i>,对I进行处理,找到满足条件的I 

I整数对应的数字需要连续包含R<i>对应的数字。比如R<i>23I231,那么I包含了R<i>,条件满足 。 

R<i>从小到大的顺序:

(1)先输出R<i> 

(2)再输出满足条件的I的个数; 

(3)然后输出满足条件的II序列中的位置索引(0开始) 

(4)最后再输出I 

附加条件: 

(1)R<i>需要从小到大排序。相同的R<i>只需要输出索引小的以及满足条件的I,索引大的需要过滤掉 

(2)如果没有满足条件的I,对应的R<i>不用输出 

(3)最后需要在输出序列的第一个整数位置记录后续整数序列的个数(不包含“个数”本身)

 

序列I15,123,456,786,453,46,7,5,3,665,453456,745,456,786,453,123(第一个15表明后续有15个整数) 

序列R5,6,3,6,3,0(第一个5表明后续有5个整数) 

输出:30, 3,6,0,123,3,453,7,3,9,453456,13,453,14,123,6,7,1,456,2,786,4,46,8,665,9,453456,11,456,12,786

说明:

30----后续有30整数

3----从小到大排序,第一个R<i>0,但没有满足条件的I,不输出0,而下一个R<i>3

6--- 存在6个包含3I 

0--- 123所在的原序号为0 

123--- 123包含3,满足条件 

示例1

输入

15 123 456 786 453 46 7 5 3 665 453456 745 456 786 453 123
5 6 3 6 3 0

输出

30 3 6 0 123 3 453 7 3 9 453456 13 453 14 123 6 7 1 456 2 786 4 46 8 665 9 453456 11 456 12 786

说明

将序列R:5,6,3,6,3,0(第一个5表明后续有5个整数)排序去重后,可得0,3,6。
序列I没有包含0的元素。
序列I中包含3的元素有:I[0]的值为123、I[3]的值为453、I[7]的值为3、I[9]的值为453456、I[13]的值为453、I[14]的值为123。
序列I中包含6的元素有:I[1]的值为456、I[2]的值为786、I[4]的值为46、I[8]的值为665、I[9]的值为453456、I[11]的值为456、I[12]的值为786。
最后按题目要求的格式进行输出即可。     
let I=readline().split(" ").map(Number)
let ni=I.slice(0,1)
I=I.slice(1)
let R=readline().split(" ").map(Number)
let nr=I.slice(0,1)
R=R.slice(1).sort((a,b)=>a-b)
R=Array.from(new Set(R))
let res=[]
for(let i=0;i<R.length;i++){
    let r=R[i]
    let temp=[]
    for(let j=0;j<I.length;j++){
        if(I[j].toString().includes(r)){
            temp.push(j)
            temp.push(I[j])
        }
    }
    if(temp.length>0){
        res.push(r)
        res.push(temp.length/2)
        res=res.concat([...temp])
    }
}
res.unshift(res.length)
console.log(res.join(" "))

发表于 2022-08-31 14:48:59 回复(0)
const line1 = readline().split(' ') //获取第一行输入的值并转为数组
const line2 = readline().split(' ') //获取第二行输入的值并转为数组
line1.shift() //分别去除第一个和第二个数组第一项
line2.shift()
const IArr = [...line1] //处理生成要对比的数组
const RArr = [...new Set(line2)].sort((a,b)=>a-b) //去重并排序
let res = [] //存储结果的数组
RArr.forEach(item=>{ //遍历数组I和R,查找数组I中的某项字符串是否包含数组R中的某项字符串
    let flag = false  //标志是否查到,查不到则不输出0
    let hasArr = [] //存储从I中查找到的索引和值
    let hasArrLen = 0 //存储查找到的数据数量
    IArr.forEach((item1,index1)=>{
        if( item1.indexOf(item) !== -1){
            flag = true
            hasArrLen++
            hasArr.push(index1,item1)
        }
    })
    if(flag){
        res.push(item,hasArrLen,...hasArr)
    }
})
console.log(res.length,...res)

发表于 2022-07-05 14:36:32 回复(0)
let L = readline().split(' ').slice(1)
let R = readline().split(' ').slice(1).sort((a,b)=>a-b)
let result = []
let hasCompute = []

R.forEach((r,index)=>{
    if(!hasCompute.includes(r)){
        hasCompute.push(r)
        let find = []
        let count = 0
        L.forEach((l,index)=>{
            if(l.indexOf(r)!=-1){
                count ++
                find.push(index,l)
            }
        })
        if(find.length>0){
            find.unshift(r,count)
            result = result.concat(find)
        }
    }
})
result.unshift(result.length)
print(result.join(" "))

发表于 2022-06-28 20:52:23 回复(0)
let line = readline()
let arr = line.split(' ')
IN = arr.shift()
I = arr

let line2 = readline()
let arr2 = line2.split(' ')
RN = arr2.shift();


var stat = {}
new Set(arr2).forEach(RI=>{
    if(isNaN(stat[RI])) stat[RI] = [];
    I.forEach(function(v, k){
        if(v.indexOf(RI) != -1){
            stat[RI].push([k, v])
        }
    })
})

var outN = 0
var out = [];
for(var RI in stat){
    if(stat[RI].length>0){
        outN += 2
        outN += 2 * stat[RI].length
        out.push(RI, stat[RI].length)
        stat[RI].forEach(v=>{
            out.push(v[0], v[1]);
        })
    }
}
out.unshift(outN)
console.log(out.join(' '))

发表于 2022-06-23 22:54:33 回复(0)
var arr = [];
while(line = readline()) {
    arr.push(line);
}

for(var i = 0; i < arr.length; i += 2) {
    dealRule(arr[i], arr[i+1]);
}

function dealRule(numArr,ruleArr) {
    var numA = numArr.split(' ').splice(1).map((a) => {return parseInt(a)});
    var ruleA = [...new Set(ruleArr.split(' ')
                .splice(1)
                .map((item)=>{ return parseInt(item)}))]
                .sort((a,b) => { return a - b;});
    var arr = [];
    for(var i = 0; i < ruleA.length; i++) {
        arr = arr.concat(cacuRule(ruleA[i], numA));
    }
    if(arr.length){
        arr.unshift(arr.length)
    }
    console.log(...arr)
}

function cacuRule(r, nums) {
    var count = 0; // 满足条件的I的个数
    var arr = [];
    for(var i = 0; i < nums.length; i++) {
        if(String(nums[i]).indexOf(String(r)) > -1) {
            count++;
            arr.push(i, nums[i]); // 包含规则R[i], arr 存入I的索引,值
        }
    }
    if(count){
        arr.unshift(r,count);
    }
    return arr;
}
发表于 2022-04-02 11:00:39 回复(0)
const IArr = readline().split(' ').slice(1)
let RArr = readline().split(' ').slice(1)
let NewRArr = Array.from(new Set(RArr)).sort((a,b)=>Number(a)-Number(b)) //R序列去重并按从小到大的顺序排列
let NewIArr = [] //存放满足条件的I
NewRArr.forEach(R=>{//遍历去重后的R序列
    let forArr = [R] //用于存放该次循环满足条件的I
    let num = 0 //声明有多少个I满足条件
    IArr.forEach((I,index)=>{
        if(I.indexOf(R)!==-1){//在I序列中的某个数满足条件(I包含了R)
            forArr.push(index.toString()) //push满足条件的下标
            forArr.push(I) //push满足条件的I
            num ++ //每有一个满足的I(num就加1)
        }
    })
    if(num!=0){   //当满足的数大于0时
        forArr.splice(1,0,num.toString())//将num插入到下标为1的位置(代表满足的I的个数)
        NewIArr = NewIArr.concat(forArr)//将每次循环生成的数组合并到最终结果数组内
    }
})
console.log(`${NewIArr.length} ${NewIArr.join(' ')}`)

发表于 2022-03-22 22:48:27 回复(0)
为啥自测正确,保存运行却是错的
发表于 2022-03-05 23:35:43 回复(0)
let line;
while(line = readline()){
line = line.split(' ').slice(1)
var R = readline().split(' ').slice(1).sort((a,b)=>{return a - b});
var result = [];
let cf = '';
R.forEach(item=>{
    if(cf == item){
        return;
    }
    cf = item;
    var temp = [];
    line.forEach((str,index)=>{
        if(str.indexOf(item) != -1){
            temp.push(index,str);
        }
    })
    if(temp.length>0){
        temp.unshift(item,temp.length/2);
    }
    result = result.concat(temp);
})
length = result.length;
result.unshift(length);
 
console.log(result.join(' '));
}

发表于 2021-12-05 21:02:44 回复(0)