1 条题解

  • 0
    @ 2025-8-24 21:30:53

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ⚡LZSY01_XZY⚡
    ⚡LZSY01_XZY⚡这个家伙极其极其极其极其极其极其极其懒,留下了一串废话

    搬运于2025-08-24 21:30:53,当前版本为作者最后更新于2019-01-26 10:03:46,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    环顾整个题解区,都没有我写的简单\text{环顾整个题解区,都没有我写的简单} QwQQwQ

    进我的博客浏览

    我的想法是这样的:

    分别考虑个位,十位,百位,千位,万位...\text{分别考虑个位,十位,百位,千位,万位...}

    可以发现sum(sum(ii)) =10i(i=19(n/10i)+=10^i*(\sum_{i=1}^{9}*(n/10^i)+ $\sum_{i=1}^{n\mod10^i/10^{i-1}-1})+(n\mod10^i/10^{i-1})*(n\mod10^i)+1$

    故代码如下:

    #include <cstdio>
    using namespace std;
    long long n;
    int sum[10]={0,1,3,6,10,15,21,28,36,45};
    
    int get(int n)
    {
    	if(n<0)return 0;
    	return n;
    }
    
    long long get_ans(long long n)
    {
    	long long res=0,a=1,b=0;	
    	while(n>0)
    	{
    		res=res+a*(45*(n/10)+sum[get(n%10-1)])+(n%10)*(b+1);
    		b=b+(n%10)*a;a*=10;
    		n/=10;
    	}
    	return res;	
    }
    
    int main()
    {
    	scanf("%lld",&n);
    	printf("%lld\n",get_ans(n));
    	return 0;
    }
    

    我的代码里对i=1k\sum_{i=1}^{k}打了表

    觉得不错的话点个赞欧

    • 1

    信息

    ID
    806
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者