hdu 6424 Rikka with Time Complexity 数学

版权声明:本文为博主原创文章,转载请附上原博客链接。 https://blog.csdn.net/Dale_zero/article/details/82024086

题目链接: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;
}

猜你喜欢

转载自blog.csdn.net/Dale_zero/article/details/82024086