数据分类处理
来源:互联网 发布:pdf expert mac破解版 编辑:程序博客网 时间:2024/06/01 16:03
题目描述
信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码、 QQ 用户、手机号码、银行帐号等信息及活动记录。
采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出。
输入描述:
一组输入整数序列I和一组规则整数序列R,I和R序列的第一个整数为序列的个数(个数不包含第一个整数);整数范围为0~0xFFFFFFFF,序列个数不限
输出描述:
从R依次中取出R<i>,对I进行处理,找到满足条件的I<j>:
I<j>整数对应的数字需要连续包含R<i>对应的数字。比如R<i>为23,I<j>为231,那么I<j>包含了R<i>,条件满足 。
按R<i>从小到大的顺序:
(1)先输出R<i>;
(2)再输出满足条件的I<j>的个数;
(3)然后输出满足条件的I<j>在I序列中的位置索引(从0开始);
(4)最后再输出I<j>。
附加条件:
(1)R<i>需要从小到大排序。相同的R<i>只需要输出索引小的以及满足条件的I<j>,索引大的需要过滤掉
(2)如果没有满足条件的I<j>,对应的R<i>不用输出
(3)最后需要在输出序列的第一个整数位置记录后续整数序列的个数(不包含“个数”本身)
序列I:15,123,456,786,453,46,7,5,3,665,453456,745,456,786,453,123(第一个15表明后续有15个整数)
序列R:5,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<j>,不输出0,而下一个R<i>是3
6--- 存在6个包含3的I<j>
0--- 123所在的原序号为0
123--- 123包含3,满足条件
输入
15 123 456 786 453 46 7 5 3 665 453456 745 456 786 453 1235 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中元素有相同的,则索引大的需要过滤,并且要从小到大输出,所以用STL中的set来存R。I中元素没有这些规定,用vector存即可。
然后,根据每个R<i>来判断I<j>,需要将R<i>和I<j>分别转化为字符串,然后判断R<i>是否是I<j>的子串。
最后,将所有要输出的R<i>和I<j>等信息按照题目要求存到vector中,再进行输出。需要注意的是,在记录满足条件的I<j>个数时,需要先在存了R<i>后存I<j>个数(初始化为1),再不断更新它。
代码
#include <iostream>#include <vector>#include <set>#include <string>using namespace std;string itos(unsigned int num); //将num转化为字符串int main(){ unsigned int M, N; while (cin >> M) { vector<unsigned int> I; unsigned int num; for (unsigned int i = 0; i < M; i++) //存序列I { cin >> num; I.push_back(num); } set<unsigned int> R; cin >> N; for (unsigned int i = 0; i < N; i++) //存序列R,按顺序排列,无重复元素 { cin >> num; R.insert(num); } vector<unsigned int> result; for (auto iter = R.begin(); iter != R.end(); iter++) { string str = itos(*iter); //将R<i>转化为字符串 bool flag = 0; //标记是否能找到满足条件的I<j> int index = 0; //记录满足条件的I<j>的个数的位置 for (auto iter2 = I.begin(); iter2 != I.end(); iter2++) { string str2 = itos(*iter2); //将I<j>转化为字符串 if (str2.find(str) != string::npos) //能在str2中找到str1 { if (!flag) //如果没存过R<i>,则先存R<i>和个数 { result.push_back(*iter); result.push_back(1); //个数,后面会更新 index = result.size() - 1; //返回个数所在位置 result.push_back(iter2 - I.begin()); //存索引j result.push_back(*iter2); //存I<j> flag = 1; } else { result.push_back(iter2 - I.begin()); //存索引j result.push_back(*iter2); //存I<j> result[index]++; //更新个数 } } } } cout << result.size() << " "; //整数个数 for (unsigned int i = 0; i < result.size(); i++) { if (i == result.size() - 1) //最后一个元素 cout << result[i] << endl; else cout << result[i] << " "; } } return 0;}string itos(unsigned int num) //将num转化为字符串{ string str; if (num == 0) { str = '0'; return str; } while (num > 0) { str = static_cast<char>((num % 10) + '0') + str; num /= 10; } return str;}
- 数据分类:特征处理
- HW----数据分类处理
- 数据分类处理
- [华为OJ] 数据分类处理
- [编程题]数据分类处理
- 华为OJ数据分类处理
- 华为OJ_数据分类处理
- 数据挖掘中数据分类不平衡处理
- 用Django 模板处理分类汇总数据
- 【华为OJ】【091-数据分类处理】
- 华为机试---数据分类处理
- 华为机试题:数据分类处理
- 华为在线编程系列-数据分类处理
- 华为OJ——数据分类处理
- 数据挖掘之处理分类自变量与处理时间变量
- 数据挖掘之处理分类自变量与处理时间变量
- 数据挖掘之处理分类自变量与处理时间变量
- 数据预处理系列:(五)分类变量处理
- ReactNative系列之十七事件发送
- Java使用zxing生成解读QRcode二维码
- LightOJ
- HDU 3415——Max Sum of Max-K-sub-sequence
- 相信积累的力量——《把时间当作朋友》读后感
- 数据分类处理
- Java语言基础
- C#与.NET发展
- 对比线程安全和可重入函数
- Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)
- JAVA中的垃圾回收机制
- JS decodeURI解码Java URLEncoder.encode编码的字符串不完全的问题
- linux中断的上半部和下半部
- 左右列表转移