为什么会有RE这种情况 过了一半RE一半 (大雾)

P3955 [NOIP2017 普及组] 图书管理员

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


|