信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码、QQ用户、手机号码、银行帐号等信息及活动记录。
采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出。
输入描述:
一组输入整数序列I和一组规则整数序列R,I和R序列的第一个整数为序列的个数(个数不包含第一个整数);整数范围为0~0xFFFFFFFF,序列个数不限
输出描述:
从R依次中取出R,对I进行处理,找到满足条件的I
I
按R从小到大的顺序:
(1)先输出R;
(2)再输出满足条件的I
(3)然后输出满足条件的I
(4)最后再输出I
附加条件:
(1)R需要从小到大排序。相同的R只需要输出索引小的以及满足条件的I
(2)如果没有满足条件的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为0,但没有满足条件的I
6--- 存在6个包含3的I
0--- 123所在的原序号为0
思路:用一个vector记录R[i]中满足条件的对数,存入结果数组,最后输出结果数组的总数和结果数组的元素
1 #include2 #include 3 #include<set> 4 using namespace std; 5 void tovec(int n,vector<int>&v)//将数字的每位按顺序存入数组中 6 { 7 if (n == 0) 8 { 9 v.push_back(n); 10 } 11 12 13 while (n) 14 { 15 16 int m = n % 10; 17 v.insert(v.begin(),m); 18 n = n / 10; 19 } 20 21 22 23 } 24 bool iscontain(vector<int>v1, vector<int>v2)//看看v1数组中是否包含v2 25 { 26 if (v1.size() < v2.size()) 27 return false; 28 for (int i = 0; i < v1.size(); i++) 29 { 30 int k = 0; 31 int temp = i; 32 if (v1[i] == v2[k]) 33 { 34 while (v1[i] == v2[k]&&i v2.size()) 35 { 36 if (k == v2.size() - 1) 37 return true; 38 i++; 39 k++; 40 } 41 } 42 i = temp; 43 } 44 return false; 45 } 46 int main() 47 { 48 //获取I,R 49 int n; 50 while(cin>>n) 51 { 52 int elem; 53 54 vector<int>I; 55 while (n) 56 { 57 cin >> elem; 58 I.push_back(elem); 59 n--; 60 } 61 int m; 62 cin >> m; 63 set<int>R; 64 65 while (m) 66 { 67 cin >> elem; 68 R.insert(elem); 69 m--; 70 } 71 72 /*******************************/ 73 vector<int>res; 74 pair<int, int> p1; 75 set<int>::iterator rit = R.begin(); 76 77 for (; rit!=R.end(); rit++) 78 { 79 vector<int>v1; 80 tovec(*rit, v1); 81 vector int, int>> vec; 82 83 vec.clear(); 84 for (int i = 0; i < I.size(); i++) 85 { 86 87 vector<int>v2; 88 tovec(I[i], v2); 89 90 if (iscontain(v2, v1)) 91 { 92 p1 = make_pair(i, I[i]); 93 vec.push_back(p1); 94 } 95 } 96 if (vec.size()>0) 97 { 98 res.push_back(*rit); 99 res.push_back(vec.size()); 100 vector int, int>>::iterator vit = vec.begin(); 101 for (; vit != vec.end(); vit++) 102 { 103 res.push_back(vit->first); 104 res.push_back(vit->second); 105 } 106 } 107 } 108 cout << res.size(); 109 for (int i = 0; i < res.size(); i++) 110 { 111 cout << " "<<res[i]; 112 } 113 cout<<endl; 114 } 115 116 return 0; 117 }