码迷,mamicode.com
首页 > 其他好文 > 详细

U68641 划水(swim.pas/c/cpp)

时间:2019-04-15 23:13:24      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:scan   span   int   ace   return   输入   lin   net   names   

U68641 划水(swim.pas/c/cpp)

题目背景

小小迪带你划水。

题目描述

原题

输入输出格式

输入格式:

第一行一个数 T。 接下来 T 行每行一个数表示 n

输出格式:

输出 T 行每行一个整数表示这个数的子数

输入输出样例

输入样例#1: 
2
1234567890123456789
1021
输出样例#1: 
332876913
1158

sol:一个个拆出来过于睿智,所以我们一位位讨论贡献,十分简单
技术图片
// luogu-judger-enable-o2
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
inline ll read()
{
    ll s=0;
    bool f=0;
    char ch= ;
    while(!isdigit(ch))
    {
        f|=(ch==-); ch=getchar();
    }
    while(isdigit(ch))
    {
        s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
    }
    return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
    if(x<0)
    {
        putchar(-); x=-x;
    }
    if(x<10)
    {
        putchar(x+0);    return;
    }
    write(x/10);
    putchar((x%10)+0);
    return;
}
#define W(x) write(x),putchar(‘ ‘)
#define Wl(x) write(x),putchar(‘\n‘)
const int N=100005;
const ll Mod=1000000007;
int T,n;
ll Bin[N],SBin[N];
char S[N];
int main()
{
    int i;
    R(T);
    Bin[0]=SBin[0]=1;
    for(i=1;i<=100000;i++)
    {
        SBin[i]=(SBin[i-1]+(Bin[i]=Bin[i-1]*10%Mod))%Mod;
        Bin[i]=Bin[i-1]*10%Mod;
    }
    while(T--)
    {
        ll ans=0,Sum=1;
        scanf("%s",S+1);
        n=strlen(S+1);
        for(i=1;i<=n;i++)
        {
            int oo=S[i]-0;
            if(!oo) continue;
            ans=(ans+Sum*SBin[n-i]%Mod*oo)%Mod;
            Sum++;
        }
        Wl(ans);
    }
    return 0;
}
/*
input
1
1234567890123456789
output
332876913

input
1
1021
output
1158
*/
View Code

 

 

U68641 划水(swim.pas/c/cpp)

标签:scan   span   int   ace   return   输入   lin   net   names   

原文地址:https://www.cnblogs.com/gaojunonly1/p/10713631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!