一道水题怎么也过不了,经历了痛苦且漫长的debug后发现竟然是数据类型没统一导致的。
题目: hdu5019
问题代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e5;
[N];
ll s,b,k;
ll a(ll a,ll b)
ll gcd{
return b?gcd(b,a%b):a;
}
int main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
>>a>>b>>k;
cin=gcd(a,b);
ll dint cnt=0,i;
for(i=1;i*i<d;i++)
{
if(d%i==0)
{
[++cnt]=i;
s[++cnt]=d/i;
s}
}
if(i*i==d)
[++cnt]=i;
sif(cnt<k)
{
<<-1<<'\n';
cout}
else
{
(s+1,s+cnt+1);
sort<<s[cnt+1-k]<<'\n';
cout}
}
return 0;
}
AC代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e5;
[N];
ll s,b,k;
ll a(ll a,ll b)
ll gcd{
return b?gcd(b,a%b):a;
}
int main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
>>a>>b>>k;
cin=gcd(a,b);
ll d=0,i;
ll cntfor(i=1;i*i<d;i++)
{
if(d%i==0)
{
[++cnt]=i;
s[++cnt]=d/i;
s}
}
if(i*i==d)
[++cnt]=i;
sif(cnt<k)
{
<<-1<<'\n';
cout}
else
{
(s+1,s+cnt+1);
sort<<s[cnt+1-k]<<'\n';
cout}
}
return 0;
}
唯一的不同的是cnt
和i
的数据类型,我感觉是在for循环的判定条件中有i*i<d
,d
是long
long类型的,左边i
也得是long
long类型的才能快速判断,不然可能会在每次判断时都进行类型转换,造成大量时间的浪费。
一次TLE,发现了个很深的代码习惯问题。