zoukankan      html  css  js  c++  java
  • 洛谷P2110 欢总喊楼记

    洛谷题目链接

    乱搞qwq

    我们其实可以找规律,对于每个数$x$,我们先求出从$1$~$x$中有多少符合条件的,记为$sum[x]$,那么类似于前缀和,答案自然就是$sum[r]-sum[l-1]$了

    那么怎么求出$sum[x]$呢,我们思考两情况:

    $1、$位数为$1$,也就是$x<=9$,这种情况的话,不用说了。。就是$x$。

    $2、$位数大于$1$,这种情况的话,我们会发现,如果想要个位与最高位相同,那么每十个数才会有且只有一个数符合要求,为什么呢?举个例子:当现在最高位是百位且为$2$时,那么个位也必须是$2$,所以符合要求的就是$202,212,222,232......$看出来了吗,这也就是为什么十个数中必定且只有一个数符合要求

    但是,这还没完!

    我们还要考虑一种情况:

    假设$x$是$332$的时候,我们会发现我们把$333$算了进去,所以当最高位大于最低位时,要减去$1$

    那么思路讲完了,代码如下:

    #include<iostream>
    #include<cstdio>
    #define ll long long
    using namespace std;
    ll l,r;
    ll Get(ll x)
    {
    	if(x<=9)
    		return x;
    	ll ge=x%10,ans=x/10+9,now=x;
    	while(now>=10)
    		now/=10;
    	if(now>ge)
    		--ans;
    	return ans;
    }
    int main()
    {
    	scanf("%lld%lld",&l,&r);
    	printf("%lld",Get(r)-Get(l-1));
    	return 0;
    }
    

      

  • 相关阅读:
    「Python」pandas入门教程
    「Python」字符串操作内置函数
    「Python」10个python项目
    python-基础入门-序
    提取网站图片
    c#图片添加水印
    js获取url传递的参数
    构建之法阅读笔记01
    学习进度条<第一周>
    30道四则运算<1>
  • 原文地址:https://www.cnblogs.com/yexinqwq/p/10229948.html
Copyright © 2011-2022 走看看