【51Nod 1691】比大小

12 篇文章 0 订阅
5 篇文章 0 订阅

Description

AB
A0,a,b,N
An=A(n1)a+b(n>=1)
B
Bn=2B(n/2)+1(n)
Bn=2B((n1)/2)+(n+1)/2(n)

BAN(AN)+1

T
A0,a,b,N<=1e15
T<=100

Solution

一看到这种题就拿出草稿纸暴搜b的值

然后,发现题目只用输出大小关系,那么我们可以找一找大小的规律,因为这种题直接算肯定是不行的。
然后我们发现从1开始b[i]与b[i+1]的大小关系是=<><一直循环。

矩阵乘法

用矩阵求出a的值,不断地mod 4,就好了。
然后直接输出。

注意

要特判a[n]=0的情况,这种情况输出=。

要用快速乘

否则会爆!

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
const int mo=4;
typedef long long ll;
ll i,j,k,l,t,n,m,ans,q;
ll qsc(ll x,ll y){
    ll a1=x/1000000,a2=x%1000000,b1=y/1000000,b2=y%1000000,z=0;
    z=(a1*b1%mo*1000000%mo*1000000%mo);
    z=(z+a1*b2%mo*1000000%mo);
    z=(z+a2*b2%mo);
    z=(z+a2*b1%mo*1000000%mo);
    return z%mo;
}
struct node{
    ll ju[2][2];
    node friend operator *(node x,node y){
        node z;int i,j,k;memset(z.ju,0,sizeof(z.ju));
        fo(i,0,1){
            fo(j,0,1){
                fo(k,0,1)(z.ju[i][j]+=qsc(x.ju[i][k],y.ju[k][j]))%=4;
            }
        }
        return z;
    }
}a,b;
node qsm(node x,ll y){
    node z;memset(z.ju,0,sizeof(z.ju));
    fo(i,0,1)z.ju[i][i]=1;
    while(y){
        if(y&1)z=z*x;
        y/=2;
        x=x*x;
    }
    return z;
}
int main(){
    for(scanf("%lld",&q);q;q--){
        memset(a.ju,0,sizeof(a.ju));memset(b.ju,0,sizeof(b.ju));
        scanf("%lld%lld%lld%lld",&a.ju[0][0],&b.ju[0][0],&a.ju[0][1],&n);
        if(a.ju[0][0]==0&&a.ju[0][1]==0){
            printf("=\n");
            continue;
        }
        b.ju[1][0]=1,b.ju[1][1]=1;
        a=a*qsm(b,n);
        if(n==0){
            printf("=\n");
            continue;   
        }
        if(a.ju[0][0]==0)printf("<\n");
        else if(a.ju[0][0]==1)printf("=\n");
        else if(a.ju[0][0]==2)printf("<\n");
        else printf(">\n");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值