_200825_ @ 2024-08-20 10:50:48
#include<bits/stdc++.h>
using namespace std;
int book[10000],reader[10000],readernum[10000],readerneed[10000];//书籍编号,读者需求码和其位数,是否找到
int i,j,n,q,num;//n,q同题目
void find(int x,int a,int b,int c){
num=pow(10,x);
if(b%num==a||b==a){
readerneed[c]=b;
i++;
j=1;
}
else readerneed[c]=-1;
}//寻找能否借到书
void prt(){
for(i=1;i<=q;i++){
if(readerneed[i]>=0) cout<<readerneed[i]<<endl;
else cout<<"-1"<<endl;
}
}//输出
int main(){
cin>>n>>q;
for(i=1;i<=n;i++){
cin>>book[i];
if(book[i]<=book[i-1]) swap(book[i],book[i-1]);
}
sort(book,book+i+1);
for(i=1;i<=q;i++){
cin>>reader[i]>>readernum[i];
}
for(i=1;i<=q;i++) for(j=1;j<=n;j++) find(reader[i],readernum[i],book[j],i);
prt();
}
by _200825_ @ 2024-08-20 10:53:22
测试点1,2,7未通过
by Emil_ @ 2024-08-20 10:53:51
@200825
详细注释:
#include <bits/stdc++.h>
using namespace std;
int n,q,lll;//舒服了!!!!!!!! ,lll存长度
string a[1100],xxx;//xxx存需求码
bool cmp(string a,string b){//判断大小,升序排序
if(a.size()!=b.size()){//长度不等,长的大
return a.size()<b.size();
}else{
return a<b;//长度相等,从首到尾判断大小
}
}
int main(){
cin>>n>>q;
for(int i=0;i<n;i++){
cin>>a[i];
for(int j=0;j<a[i].size();j++){
a[i][j]-='0';
// cout<<(int)a[i][j];
}
// cout<<endl;//看看转换对了吗
}
sort(a,a+n,cmp);//升序排序,确保最先找到的是最小
// for(int i=0;i<n;i++){
// for(int j=0;j<a[i].size();j++){
// cout<<(int)a[i][j];
// }
// cout<<endl; //看看排序对了吗
// }
bool flag=true;
for(int i=0;i<q;i++){//一个人一个人的边输入边找
flag=true;
cin>>lll>>xxx;//输入一个找一个
for(int j=0;j<lll;j++){
xxx[j]-='0';
// cout<<(int)xxx[j];
}
// cout<<endl;//看看转换对了吗
for(int l=0;l<n;l++){//遍历每本书
for(int j=lll-1,k=0;j>=0;j--,k++){//从最后开始判断字符是否相等
if(a[l][a[l].size()-k-1]!=xxx[j]){
//不相等将flag改为false,退出循环
flag=false;
break;
}else{
flag=true;//否则还原为true
}
}
if(flag==true){
//能进入这个if证明找到了书
for(int j=0;j<a[l].size();j++)
cout<<(int)a[l][j];//输出书
cout<<endl;
break;//结束此人的找书过程
}
}
if(!flag)//若到最后找完了flag还为false,就输出-1
cout<<-1<<endl;
}
return 0;
}
by _200825_ @ 2024-08-20 10:56:28
@Emil_ 谢谢