一个玄学问题

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

Merron @ 2020-08-10 10:31:23

P3955

这是我刚开始的代码:

#include <bits/stdc++.h>
using namespace std ;

int n, q ;
int a[1005] ;

long long Pow (long long a, long long b)
{
    if (b == 0)return 1 ;
    if (b == 1)return a ;
    if (b % 2)
    {
        return Pow (a, b / 2) * Pow (a, b / 2 + 1) ;
    }
    else
    {
        return Pow (a, b / 2) * Pow (a, b / 2) ;
    }
}

int main ()
{
    cin >> n >> q ;
    for (int i = 1 ;i <= n ;i ++)
    {
        cin >> a[i] ;
    }
    sort (a + 1, a + n + 1) ;
    while (q --)
    {
        long long x , y ;
        bool ac = 0 ;
        cin >> x >> y ;
        for (int i = 1 ;i <= n ;i ++)
        {
            if (a[i] % Pow (10, x) == y )
            {
                ac = 1 ;
                cout << a[i] << endl ;
                break ;
            }
        }
        if (!ac)
        {
            cout << -1 << endl ;
        }
    }
}

这份代码我自己感觉逻辑上没有问题,但只有20分

然后我试着将查找部分写成一个函数,却AC了,代码如下

#include <bits/stdc++.h>
using namespace std ;

int n, q ;
int a[1005] ;

long long Pow (long long a, long long b)
{
    if (b == 0)return 1 ;
    if (b == 1)return a ;
    if (b % 2)
    {
        return Pow (a, b / 2) * Pow (a, b / 2 + 1) ;
    }
    else
    {
        return Pow (a, b / 2) * Pow (a, b / 2) ;
    }
}

int check (long long x, long long y)
{
    for (int i = 1 ;i <= n ;i ++)
    {
        int mod = Pow (10, x) ;
        if (a[i] % mod == y )
        {
            return a[i] ;
        }
    }
    return -1 ;
}

int main ()
{
    cin >> n >> q ;
    for (int i = 1 ;i <= n ;i ++)
    {
        cin >> a[i] ;
    }
    sort (a + 1, a + n + 1) ;
    while (q --)
    {
        long long x , y ;
        cin >> x >> y ;
        cout << check (x, y) << endl ;
    }
}

我觉得这两份代码并没有太大差别,为什么评测结果 差别 很大?

求大佬指教!


by Merron @ 2020-08-10 10:33:00

@tangrunxi


by yummy @ 2020-08-10 10:44:16

@Merron 问题还没找出来,但是听我一句劝:

你这么写快速幂鸟用也没有,不如暴力


by Merron @ 2020-08-10 10:47:13

@yummy 我已经A了,但不知道为什么第一次的代码不对


|