zoukankan      html  css  js  c++  java
  • 【XJOI 训练1】友好数对

    如果一个数a能由一个数b旋转得到,那么我们称为友好数对,如12345和45123为友好数对,12345和54321不为友好数对。给出两个正整数L,R,求有多少友好数对,满足L<=a

     

    输入格式:

    第一行一个整数T,表示数据组数,每组数据两个正整数L,R。

     

    输出格式:

    对于每组数据,输出一个整数表示答案。

     

    样例输入:

    4
    1 9
    10 40
    100 500
    1111 2222
    

     

    样例输出:

    0
    3
    156
    287
    

     

    数据范围:

    对于30%的数据满足L,R<=1000
    对于100%的数据满足L,R<=2000000,T<=30,L,R位数相同。

     

    时间限制:

    2S

     

    空间限制:

    256M

     

    提示:

    remove!!!

     

     

    题解:(题目写了题解,好人性化!我喜欢XJOI)我们枚举范围内的所有数,并求出含有当前数的数对个数。
    但某些数可能产生重复,如1212,这种情况下,我们只要在旋转到与原数一样时跳出循环即可。

    #include <cstdio>
    #include <string>
    using namespace std;
    int T,L,R,ans,n;
    int s[22]={1};
    bool v[2000002];
    
    int funny(int x){
        int k=0,p=x;
        for(int i=1;i<n;i++){
            x=(x%s[n-1])*10+(x/s[n-1]);
            if(x>p&&x<=R) k++;
            if(x==p) break;
        }
        return k;
    }
    int main(){
        freopen("b.in","r",stdin);
        freopen("b.out","w",stdout);
        scanf("%d",&T);
        for(int i=1;i<=10;i++)
            s[i]=s[i-1]*10;
        while(T--){
            scanf("%d %d",&L,&R);
            ans=n=0;
            for(int i=L;i;i/=10) n++;
            for(int i=L;i<=R;i++)
                ans+=funny(i);
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Mysql安装
    mysql 密码过期
    svn 合并分支
    idea 分支主干管理
    linux删除数据恢复,extundelete
    linux 转换文件编码
    sina 接口 根据ip获取各个国家和地区
    SQL中char、varchar、nvarchar的区别
    C#中virtual和abstract区别,举例子
    父类和子类的关系、代码例子
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11816933.html
Copyright © 2011-2022 走看看