zoukankan      html  css  js  c++  java
  • Codeforces Round #675 (Div. 2).C. Bargain

    Codeforces Round #675 (Div. 2).C. Bargain

    题意:
    给你一个字符串,你可以删除其中的字串,然后统计剩下的值的和。
    思路:
    枚举每一位的贡献。
    对于这道题,每一位的贡献是由前面部分和后面部分组成的,对于对于第i位,如果选前面的串,一共由(1,2,3...i-1)选法,一共是
    (i-1)×i÷2×ai×权重。
    对于后面的串来讲,它的贡献可以这样想,如果只去掉一位,那它的权重就小10倍,去掉一位一共有n-i种选法,也就是(n-i)×ai×权重。依次类推,如果去掉2位,权重小100倍,一共有n-i-1种选法,以此类推,后面的为
    avatar
    这个可以通过循环算出来
    代码如下

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N=1e6;
    const int mod=1e9+7;
    char s[N];
    int main()
    {
        cin>>s+1;
        int len=strlen(s+1);
        ll sum=0;
        ll ans=0;
        ll pw=1;
        for(ll i=len;i>=1;i--)
        {
            ll num=(i-1)*i/2;
            ll cur=(num*(s[i]-'0')%mod*pw%mod);//算前面的贡献
            ans%=mod;
            ans=(ans+cur)%mod;
            cur=(sum*(s[i]-'0')%mod);//后面的贡献
            ans=(ans+cur)%mod;
            sum+=(len-i+1)*pw;//跟新sum
            sum%=mod;
            pw*=10;//跟新权值
            pw%=mod;
        }
        ans%=mod;
        cout<<ans<<endl;
        return 0;
    }
    
  • 相关阅读:
    (十)安装YAML
    (十四)日志
    Android自动化测试------monkeyrunner(六)
    Android自动化测试------monkey日志管理(五)
    如何学好一门编程语言
    linux vi hjkl由来
    .net 微服务CICD 好文章
    APPCMD 精心整理 有点赞的吗
    APPCMD 命令合集
    APPCMD 使用手册
  • 原文地址:https://www.cnblogs.com/Aracne/p/14060336.html
Copyright © 2011-2022 走看看