zoukankan      html  css  js  c++  java
  • Comet OJ C1076 [Contest #4]求和

    题目
    首先我们可以通过经典容斥转化为计算([1,x])的答案。
    现在我们考虑一个数的个位对答案的贡献。
    每做一次操作都会让个位加上十位然后取模,直到只有个位为止。
    我们发现这个过程中,个位数前的系数永远都是(1),也就是个位数对答案的贡献系数为(1)
    这意味着我们对于一个固定的只有个位没确定的数,我们枚举其个位(0sim9),其答案也是(0sim9),所以我们可以直接求出([1,lfloorfrac n{10} floor*10-1])的答案为(lfloorfrac n{10} floor*45)
    然后剩下(nmod10+1)个数,直接计算很不优秀。
    我们先暴力计算(t=f(lfloorfrac n{10} floor)),那么(f(lfloorfrac n{10} floor)+i=t+i(iin[0,9])),这样只用暴力算一次,非常优秀。

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    int a[19];
    int f(ll x)
    {
        int len=0,i;
        while(x) a[++len]=x%10,x/=10;
        while(len^1)
        {
    	for(i=1;i<len;++i) a[i]=(a[i]+a[i+1])%10;
    	for(--len;!a[len]&&len^1;--len);
        }
        return a[len];
    }
    ll cal(ll x)
    {
        if(x<10) return x*(x+1)/2;
        ll s=x/10*45;int o=x%10,i,t=f(x/10*10);
        for(i=0;i<=o;++i) s+=(t+i)%10;
        return s;
    }
    int main()
    {
        int T;ll l,r;
        for(scanf("%d",&T);T;--T) scanf("%lld%lld",&l,&r),printf("%lld
    ",cal(r)-cal(l-1));
    }
    
  • 相关阅读:
    Flush the AOS cache from code
    EntityConnectionStringBuilder 构造EF连接字符串
    AX中文转拼音
    AX2012 AOT中Web部署显示二级以上菜单
    clearCompanyCache
    AX2009 打印到PDF优化
    AX ODBC读取其他SQL数据库服务器数据
    AX2009报表打印固定长度Barcode条码
    Create Product Variant
    Rename AOT Object
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/11729473.html
Copyright © 2011-2022 走看看