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;
    }
  • 相关阅读:
    c#中使用SESSION需要注意的几个问题
    C#常见算法题目(面试准备)
    C# WinForm捕获未处理的异常
    c#生成注册码的两种方法(mac地址与IP地址)
    MVC3 IIS7部署记录
    c#4.0新特性之协变与逆变
    C#语言的几个层次
    C#的装箱和拆箱
    Windows下的Memcache安装
    在C#中读取枚举值的描述属性
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11816933.html
Copyright © 2011-2022 走看看