幸运的阿瓦猫

题目描述
阿瓦是一只自称萝莉的小花猫,她生活在幻想世界。 解决了炸弹礼物的烦恼之后,她瞬间又对世界恢复了信心。这天她来到数字花园,她一下子就被绽放的花朵给 迷住了。兔阿卡观察到了这一点,决定购买一些阿瓦比较喜欢的花朵,拿回去送给阿瓦。 数字花园的每一朵花上都有一个 1 到 10亿 的数字,这些数字决定了花朵的美丽程度。 但阿卡觉得,如果直接问阿瓦喜欢哪些花,这样就太不够惊喜了。但他知道,阿瓦的幸运数字是 6 和 9。因 此他猜测,如果一个数字在六进制下1 的个数与这个数字在九进制下 1 的个数相差不超过 1 ,那么阿瓦就喜欢 这朵花。换一种方法讲,假设这个数字在六进制下 1 的个数为 x,在九进制下 1 的个数为 y,当 |x−y|≤1,即 −1 ≤ x−y ≤ 1 时,这个数字对应的花是被阿瓦所喜欢的。 1 的个数在这里是指数位中 1 的个数,比如 10294851 中有 2 个1,111 中有 3 个1。 数字花园当中有若干个入口,每个入口中的花朵上的数字都在一个连续的范围内。数字花园中没有两朵花的数 字是一样的,也就是说,所有的花朵上的数字都是不相同的。一个入口里面花朵的个数为这个入口对应数字范围的 区间大小。例如如果一个入口的数字范围是 [2,5],那么这个入口里面就有 4朵花。因为区间 [2,5] 中一共包含了 4 个正整数 {2,3,4,5} 。 阿卡在所有的入口中挑选了 T 个入口,他已经知道了这些入口对应的范围,想要让你来帮忙计算,每一个入 口中有多少朵花是阿瓦喜欢的。

输入
第一行,一个整数 T,代表阿卡挑选出的入口个数。
接下来 T 行,每行两个整数 L,R。表示这个入口对应的范围是 [L,R]。

输出
输出 T 行,对于每一个入口,都输出一个数表示这个入口中有多少朵花是阿瓦喜欢的。

3
1 3
2 10
34 1258

3
8
1012

总得来说还是暴力,然后一个前缀预处理优化,输出就好

#include<bits/stdc++.h>
using namespace std;
int sum[150000],l,r,n,f1[150000];
int read()//读入优化
{
    
    
    int x=0;char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c>='0'&&c<='9')
    {
    
    
        x=x*10+c-'0';
        c=getchar();
    }
    return x;
}
void put(int x)//输出优化
{
    
    
    if(x==0)putchar('0');
    if(x<0){
    
    putchar('-');x=-x;}
    int num=0;
    char ch[16];
    while(x)ch[++num]=x%10+'0',x/=10;
    while(num)putchar(ch[num--]);
    putchar('\n');
}
void makeans()
{
    
    
    for(int i=1;i<=100010;i++)//提前预处理
    {
    
    
        int q=i,p=i;
        int tep1=0,tep2=0;
        while(q)//几个6
        {
    
    
          if(q%6==1)tep1++;
          q/=6; 
        }
        while(p)//几个9
        {
    
    
          if(p%9==1)tep2++;
          p/=9; 
        }
        if(abs(tep1-tep2)<=1)f1[i]=1;
        sum[i]=sum[i-1]+f1[i];//前缀和优化
    }   
     
}
int main()
{
    
       
    makeans();
    n=read();
    for(int i=1;i<=n;i++)
    {
    
    
        l=read();r=read();
        put(sum[r]-sum[l-1]);输出答案
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/yhhy666/article/details/108222749
今日推荐