Comet OJ - Contest #4 D求和 思维题

Code: 

#include <bits/stdc++.h> 
#define setIO(s) freopen(s".in","r",stdin) 
#define ll long long 
#define maxn 100000 
using namespace std;      
int arr[30],brr[maxn];   
ll calc(ll t) {   
    int n=0,m=0; 
    while(t) arr[++n]=t%10,t/=10;                 
    while(n>=1) {    
        for(int i=2;i<=n;++i) brr[++m]=(arr[i]+arr[i-1])%10;    
        while(brr[m]==0 && m>=2) --m;                                
        for(int i=1;i<=m;++i) arr[i]=brr[i]; 
        n=m,m=0;    
    } 
    return arr[1];      
}
ll solve(ll k) {    
    if(k<10) return k*(k+1)/2;            
    ll re=(k/10)*45,t=calc((k/10)*10); 
    int o=k%10;      
    for(int i=0;i<=o;++i) re+=1ll*(t+i)%10;  
    return re;    
}
int main() {
    // setIO("input"); 
    int T; 
    scanf("%d",&T); 
    while(T--) {
        ll l,r; 
        scanf("%lld%lld",&l,&r);   
        printf("%lld\n",solve(r) - solve(l-1));     
    }
    return 0;  
}   

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值