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了,但不知道为什么第一次的代码不对