SbasdianJulian @ 2019-07-27 12:17:52
#include<iostream>
#include<memory.h>
using namespace std;
#define N 10000005
#define ll long long
int reader,book,n=10,a;
int r_1[N],r_2[N],b[N],m[N],e[N];
bool lend[N];
void MIN(int c[N])
{
int have=0,l=0;//康康这本书有没有借走
ll k=10000000000;
for(int i=1;i<=a;i++)
if(c[i]<k)k=c[i];//寻找编码最小的书
for(int i=1;i<=book;i++)
{
if(b[i]==k&&lend[i]==true)
{
have=1;l=1;//借到书了
cout<<k<<endl;
lend[i]=false;//标记书被借走了
}
if(l==1)break;//借完书了
}
if(have==0)cout<<"-1"<<endl;//没借到书
}
int main()
{
memset(lend,true,sizeof(lend));
cin>>book>>reader;//读入书和人的数量.
for(int i=1;i<=book;i++)
{
cin>>b[i];
lend[i]=true;//存书进去
}
for(int i=1;i<=reader;i++)
cin>>r_1[i]>>r_2[i];//读入
for(int i=1;i<=reader;i++)
{
for(int j=1;j<r_1[i];j++)//确定取模数值
{
n*=10;
e[i]=n;
}
n=10;
}
for(int i=1;i<=reader;i++)
{
for(int j=1;j<=book;j++)
{
if(b[j]%e[i]==r_2[i]%e[i])
m[++a]=b[j];//尾号相同挑出来
}
if(a!=0)//有尾号相同的书
MIN(m);
else//没有尾号相同的书
cout<<-1<<endl;
a=0;
}
return 0;
}
by 焚魂 @ 2019-08-06 23:11:36
@SbasdianJulian 推荐你用快排,有道题(这道题也是),我用冒泡就re,快排就AC