题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6424
进行复杂度的比较时先比大项后比小项。这道题基数是logn所以log越多复杂度越小,要注意一下。
然后n最大为3,考虑n为3的时候对整个式子取两次log。变成f(A+2)+f(B+1)f(C),为了使f(A+2)和f(B+1)f(C)能够比较,变成f(A+2)f(+oo)和f(B+1)f(C)。因为要先比大的后比小的,所以用两次比较计算答案
注意memset往数组里面写入值的时候只能写int值,这是其定义决定的
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f3f3f
#define mod 1000000007
#define For(i,m,n) for(int i=m;i<=n;i++)
#define Dor(i,m,n) for(int i=m;i>=n;i--)
#define LL long long
#define lan(a,b) memset(a,b,sizeof(a))
#define sqr(a) a*a
using namespace std;
LL a[4],b[4];
struct node
{
LL x,y;
node(LL p,LL q)
{
x=p,y=q;
x=min(x,inf);
y=min(y,inf);
if(x>y)
swap(x,y);
}
};
int cmp(node p,node q)
{
// printf("%d %d\n",p.x,q.x);
if(p.x<q.x)
return 1;
else if(p.x>q.x)
return -1;
if(p.y<q.y)
return 1;
else if(p.y>q.y)
return -1;
return 0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
For(i,1,3)
a[i]=inf,b[i]=inf;
int n,m;
scanf("%d%d",&n,&m);
For(i,1,n)
scanf("%lld",&a[i]);
For(i,1,m)
scanf("%lld",&b[i]);
a[1]+=2;
a[2]+=1;
b[1]+=2;
b[2]+=1;
node p1=node(a[1],inf);
node p2=node(a[2],a[3]);
node q1=node(b[1],inf);
node q2=node(b[2],b[3]);
if(cmp(p1,p2)==-1)
swap(p1,p2);
if(cmp(q1,q2)==-1)
swap(q1,q2);
// printf("p1:%lld %lld\n",p1.x,p1.y);
// printf("p2:%lld %lld\n",p2.x,p2.y);
// printf("q1:%lld %lld\n",q1.x,q1.y);
// printf("q2:%lld %lld\n",q2.x,q2.y);
if(cmp(p1,q1)!=0)
printf("%d\n",cmp(p1,q1));
else
printf("%d\n",cmp(p2,q2));
}
return 0;
}