读懂题目花不少时间
后来想到结合STL set和vector可以省不少事情
所以试了一下真的可以
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<set>
#include<vector>
#include<string.h>
using namespace std;
int I[10001];
bool has[10001];
bool check(int r, int i){//检测包含 i 包含 r
if(r>i)
return false;
int top = 1;
int bot = 1;
while(r/top!=0){
top*=10;
}
if(r==0){
top=10;
}
int k=0;
while(i*10/top!=0){
k=(i%top)/bot;
top*=10;
bot*=10;
if(k==r)
return true;
}
return false;
}
int main(){
int num_r;
int num_i;
int Rs;
set<int> set_r;
vector<int> output;
std::set<int>::iterator it;
while(scanf("%d",&num_i)!=EOF){
set_r.clear();
output.clear();
for(int i=0;i<num_i;i++){
scanf("%d",&I[i]);
}
scanf("%d",&num_r);
for(int i=0;i<num_r;i++){
scanf("%d",&Rs);
set_r.insert(Rs);
}
bool flg=false;
int num = 0;
for(it = set_r.begin();it!=set_r.end();it++){
memset(has,0,sizeof(has));
num=0;
for(int i=0;i<num_i;i++){
if(check(*it,I[i])){
flg = true;
num++;
has[i]=1;
}
}
if(num!=0){
output.push_back(*it);
output.push_back(num);
for(int i=0;i<num_i;i++){
if(has[i]){
output.push_back(i);
output.push_back(I[i]);
}
}
}
}
cout<<output.size()<<" ";
for(int i=0;i<output.size();i++){
cout<<output[i]<<" ";
}
cout<<endl;
}
}
京公网安备 11010502036488号