一个玄学问题
查看原帖
一个玄学问题
338370
Merron楼主2020/8/10 10:31

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 ;
	}
}

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

求大佬指教!

2020/8/10 10:31
加载中...