题解 | 数据分类处理
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
string itos(int num)
{
string output;
if(num <= 0){
return "0";
}
while(num){
output.push_back(num % 10 + '0');
num = num / 10;
}
for(size_t i = 0; i < output.size() / 2 ; i++){
swap(output[i], output[output.size() - i - 1]);
}
//cout << output << endl;
return output;
}
class output_data
{
public:
int index;
string data_str;
};
int main()
{
int total_num;
cin >> total_num;
vector<string> datas;
vector<int> rules;
for(size_t i = 0; i < total_num; i++){
string input;
cin >> input;
datas.push_back(input);
}
int rule_num;
cin >> rule_num;
for(size_t i = 0; i < rule_num; i++){
int input;
cin >> input;
static bool no_need_to_push_back = false;
for(auto& num : rules){
if(num == input){
no_need_to_push_back = true;
}
}
if(no_need_to_push_back){
no_need_to_push_back = false;
}else{
rules.push_back(input);
}
}
sort(rules.begin(), rules.end());
int output_count = 0;
int output_rule = -1;
int output_match = 0;
vector<output_data> vec;
size_t i = 0;
size_t j = 0;
vector<int> print_data;
for(i = 0; i < rules.size(); i++){
char num_char = rules[i] + '0';
string num_str = itos(rules[i]);
//cout << num_str << endl;
for(j = 0; j < datas.size(); j++){
string data_str = datas[j];
if(data_str.find(num_str) != string::npos){
output_rule = stoi(num_str);
output_count++;
output_data data;
data.index = j;
data.data_str = datas[j];
vec.push_back(data);
output_match++;
output_count++;
}
}
if(output_rule == -1) continue;
print_data.push_back(output_rule);
//cout << output_rule << " ";
output_rule = -1;
print_data.push_back(output_match);
//cout << output_match << " ";
output_match = 0;
for(size_t i = 0; i < vec.size(); i++){
print_data.push_back(vec[i].index);
print_data.push_back(stoi(vec[i].data_str));
//cout << vec[i].index << " ";
//cout << vec[i].data_str << " ";
}
vec.clear();
}
cout << print_data.size() << " ";
for(size_t i = 0; i < print_data.size(); i++){
cout << print_data[i] << " ";
}
// for(size_t i = 0; i < vec.size(); i++){
// cout << vec[i].index << " " << vec[i].data_str << endl;
// }
}
// 64 位输出请用 printf("%lld")
