题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#include <iostream>
#include <string>
#include <vector>
#include <set>
using namespace std;
// I是否包含R?
bool isInclude(int I, int R) {
string si = to_string(I);
string sr = to_string(R);
int leni = si.length();
int lenr = sr.length();
for(int i=0; i<leni-lenr+1; ++i) {
if(sr.compare(si.substr(i, lenr)) == 0) return true;
}
return false;
}
int main() {
int n;
cin >> n;
vector<int> I(n);
for(int i=0; i<n; ++i) cin >> I[i];
cin >> n;
set<int> R;
for(int i=0; i<n; ++i) {
int a; cin>> a;
R.insert(a);
}
vector<vector<int>> result; // I中不同元素对应结果存储在不同vector中
vector<int> rR; // 需要输出的R
int num = 0; // 输出的整数个数
for(int r : R) {
// map<int, int> RIm; // 当前R对应的
vector<int> ri;
for(int i=0; i<I.size(); ++i) {
if(isInclude(I[i], r)) ri.push_back(i);
}
if(!ri.empty()) {
result.push_back(ri);
rR.push_back(r);
num += 2 * (int)ri.size() + 2; // I元素+序号+R元素
}
}
// 输出
vector<int> output;
output.push_back(num);
for(int i=0; i<rR.size(); ++i) {
output.push_back(rR[i]);
output.push_back(result[i].size());
for(int a : result[i]) {
output.push_back(a);
output.push_back(I[a]);
}
}
for(int i=0; i<output.size(); ++i) {
if(i < output.size() - 1) cout << output[i] << " ";
else cout << output[i];
}
return 0;
}
// 64 位输出请用 printf("%lld")
查看5道真题和解析
汤臣倍健公司氛围 364人发布