XJOI 友好数对

H y p e r l i n k Hyperlink Hyperlink

https://dev.xjoi.net/contest/1289/problem/1


D e s c r i p t i o n Description Description

若一个数 a a a通过旋转之后可以得到 b b b,则称 ( a , b ) (a,b) (a,b)是友好数对,给定 L , R L,R L,R L ∼ R L\sim R LR之间的友好数对个数

数据范围: L ≤ R ≤ 2 × 1 0 6 L\leq R \leq 2\times 10^6 LR2×106


S o l u t i o n Solution Solution

暴力

时间复杂度: O ( T l o g 10 R ( R − L + 1 ) ) O(Tlog_{10}R(R-L+1)) O(Tlog10R(RL+1))


C o d e Code Code
#pragma GCC optimize(2)
#include<cstdio>
#include<cctype>
#include<algorithm>
#define LL long long
#define N 2000000
using namespace std;int t,pw,l,r,ans;
inline LL read()
{
    char c;LL d=1,f=0;
    while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;
    while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;
    return d*f;
}
signed main()
{
    t=read();
    while(t--)
    {
        l=read();r=read();ans=0;
        for(register int i=l;i<=r;i++)
        {
            int x=i,pw=1,j=0;
            while(x) x/=10,j++,pw=(pw<<3)+(pw<<1);
            pw/=10;x=i;
            do
            {
                int high=x/pw;
                x%=pw;
                x=(x<<3)+(x<<1)+high;
                if(x<=r&&x>i) ans++;
            }while(x!=i);
        }
        printf("%d\n",ans);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值