【NOIP模拟题】【数学归纳法】2016.11.17 第二题 数页码 题解

数页码

这里写图片描述
水题,乱搞。除了直接递推,什么打表什么暴力都能AC。
附各种代码:
1.打表

//cena大数据要加一个LL
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<string>
#include<iomanip>
#include<ctime>
#include<climits>
#include<cctype>
#include<algorithm>
#define LL long long
#ifdef WIN32
#define AUTO "%I64d"
#else
#define AUTO "%lld"
#endif
#define MOD 1000000007

using namespace std; 

LL n,ans;
LL F[11][11][11],rec[11];

LL pow(LL k)
{
    LL m = 1;
    if(k == 0) return 1;
    for (LL i = 1; i <= k; i++)
        m *= 10;
    return m;
}

void init()
{
    cin >> n;
    LL N = n;
    for (LL i = 1; i <= 9; i++)
    {
        rec[i] = N-N/10*10;
        N /= 10;
    }
}

void tbl();

void work()
{
    tbl();
    for (LL i = 1; i <= 9; i++)
    {
        for (LL j = i; j <= 9; j++)
            ans += F[i][j][rec[j]]; 
        ans += rec[i] * (n - n / pow(i-1) * pow(i-1));
    }
}

int main()
{
    freopen("count.in","r",stdin);
    freopen("count.out","w",stdout);
    init();
    if(n == 1000000000) ans = 40500000001LL;
    else work();
    printf(AUTO,ans);
    return 0;
}

void tbl()
{
    F[1][1][1]=1LL;
    F[1][1][2]=3LL;
    F[1][1][3]=6LL;
    F[1][1][4]=10LL;
    F[1][1][5]=15LL;
    F[1][1][6]=21LL;
    F[1][1][7]=28LL;
    F[1][1][8]=36LL;
    F[1][1][9]=45LL;
    F[1][2][1]=45LL;
    F[2][2][1]=1LL;
    F[1][2][2]=90LL;
    F[2][2][2]=12LL;
    F[1][2][3]=135LL;
    F[2][2][3]=33LL;
    F[1][2][4]=180LL;
    F[2][2][4]=64LL;
    F[1][2][5]=225LL;
    F[2][2][5]=105LL;
    F[1][2][6]=270LL;
    F[2][2][6]=156LL;
    F[1][2][7]=315LL;
    F[2][2][7]=217LL;
    F[1][2][8]=360LL;
    F[2][2][8]=288LL;
    F[1][2][9]=405LL;
    F[2][2][9]=369LL;
    F[1][3][1]=450LL;
    F[2][3][1]=450LL;
    F[3][3][1]=1LL;
    F[1][3][2]=900LL;
    F[2][3][2]=900LL;
    F[3][3][2]=102LL;
    F[1][3][3]=1350LL;
    F[2][3][3]=1350LL;
    F[3][3][3]=303LL;
    F[1][3][4]=1800LL;
    F[2][3][4]=1800LL;
    F[3][3][4]=604LL;
    F[1][3][5]=2250LL;
    F[2][3][5]=2250LL;
    F[3][3][5]=1005LL;
    F[1][3][6]=2700LL;
    F[2][3][6]=2700LL;
    F[3][3][6]=1506LL;
    F[1][3][7]=3150LL;
    F[2][3][7]=3150LL;
    F[3][3][7]=2107LL;
    F[1][3][8]=3600LL;
    F[2][3][8]=3600LL;
    F[3][3][8]=2808LL;
    F[1][3][9]=4050LL;
    F[2][3][9]=4050LL;
    F[3][3][9]=3609LL;
    F[1][4][1]=4500LL;
    F[2][4][1]=4500LL;
    F[3][4][1]=4500LL;
    F[4][4][1]=1LL;
    F[1][4][2]=9000LL;
    F[2][4][2]=9000LL;
    F[3][4][2]=9000LL;
    F[4][4][2]=1002LL;
    F[1][4][3]=13500LL;
    F[2][4][3]=13500LL;
    F[3][4][3]=13500LL;
    F[4][4][3]=3003LL;
    F[1][4][4]=18000LL;
    F[2][4][4]=18000LL;
    F[3][4][4]=18000LL;
    F[4][4][4]=6004LL;
    F[1][4][5]=22500LL;
    F[2][4][5]=22500LL;
    F[3][4][5]=22500LL;
    F[4][4][5]=10005LL;
    F[1][4][6]=27000LL;
    F[2][4][6]=27000LL;
    F[3][4][6]=27000LL;
    F[4][4][6]=15006LL;
    F[1][4][7]=31500LL;
    F[2][4][7]=31500LL;
    F[3][4][7]=31500LL;
    F[4][4][7]=21007LL;
    F[1][4][8]=36000LL;
    F[2][4][8]=36000LL;
    F[3][4][8]=36000LL;
    F[4][4][8]=28008LL;
    F[1][4][9]=40500LL;
    F[2][4][9]=40500LL;
    F[3][4][9]=40500LL;
    F[4][4][9]=36009LL;
    F[1][5][1]=45000LL;
    F[2][5][1]=45000LL;
    F[3][5][1]=45000LL;
    F[4][5][1]=45000LL;
    F[5][5][1]=1LL;
    F[1][5][2]=90000LL;
    F[2][5][2]=90000LL;
    F[3][5][2]=90000LL;
    F[4][5][2]=90000LL;
    F[5][5][2]=10002LL;
    F[1][5][3]=135000LL;
    F[2][5][3]=135000LL;
    F[3][5][3]=135000LL;
    F[4][5][3]=135000LL;
    F[5][5][3]=30003LL;
    F[1][5][4]=180000LL;
    F[2][5][4]=180000LL;
    F[3][5][4]=180000LL;
    F[4][5][4]=180000LL;
    F[5][5][4]=60004LL;
    F[1][5][5]=225000LL;
    F[2][5][5]=225000LL;
    F[3][5][5]=225000LL;
    F[4][5][5]=225000LL;
    F[5][5][5]=100005LL;
    F[1][5][6]=270000LL;
    F[2][5][6]=270000LL;
    F[3][5][6]=270000LL;
    F[4][5][6]=270000LL;
    F[5][5][6]=150006LL;
    F[1][5][7]=315000LL;
    F[2][5][7]=315000LL;
    F[3][5][7]=315000LL;
    F[4][5][7]=315000LL;
    F[5][5][7]=210007LL;
    F[1][5][8]=360000LL;
    F[2][5][8]=360000LL;
    F[3][5][8]=360000LL;
    F[4][5][8]=360000LL;
    F[5][5][8]=280008LL;
    F[1][5][9]=405000LL;
    F[2][5][9]=405000LL;
    F[3][5][9]=405000LL;
    F[4][5][9]=405000LL;
    F[5][5][9]=360009LL;
    F[1][6][1]=450000LL;
    F[2][6][1]=450000LL;
    F[3][6][1]=450000LL;
    F[4][6][1]=450000LL;
    F[5][6][1]=450000LL;
    F[6][6][1]=1LL;
    F[1][6][2]=900000LL;
    F[2][6][2]=900000LL;
    F[3][6][2]=900000LL;
    F[4][6][2]=900000LL;
    F[5][6][2]=900000LL;
    F[6][6][2]=100002LL;
    F[1][6][3]=1350000LL;
    F[2][6][3]=1350000LL;
    F[3][6][3]=1350000LL;
    F[4][6][3]=1350000LL;
    F[5][6][3]=1350000LL;
    F[6][6][3]=300003LL;
    F[1][6][4]=1800000LL;
    F[2][6][4]=1800000LL;
    F[3][6][4]=1800000LL;
    F[4][6][4]=1800000LL;
    F[5][6][4]=1800000LL;
    F[6][6][4]=600004LL;
    F[1][6][5]=2250000LL;
    F[2][6][5]=2250000LL;
    F[3][6][5]=2250000LL;
    F[4][6][5]=2250000LL;
    F[5][6][5]=2250000LL;
    F[6][6][5]=1000005LL;
    F[1][6][6]=2700000LL;
    F[2][6][6]=2700000LL;
    F[3][6][6]=2700000LL;
    F[4][6][6]=2700000LL;
    F[5][6][6]=2700000LL;
    F[6][6][6]=1500006LL;
    F[1][6][7]=3150000LL;
    F[2][6][7]=3150000LL;
    F[3][6][7]=3150000LL;
    F[4][6][7]=3150000LL;
    F[5][6][7]=3150000LL;
    F[6][6][7]=2100007LL;
    F[1][6][8]=3600000LL;
    F[2][6][8]=3600000LL;
    F[3][6][8]=3600000LL;
    F[4][6][8]=3600000LL;
    F[5][6][8]=3600000LL;
    F[6][6][8]=2800008LL;
    F[1][6][9]=4050000LL;
    F[2][6][9]=4050000LL;
    F[3][6][9]=4050000LL;
    F[4][6][9]=4050000LL;
    F[5][6][9]=4050000LL;
    F[6][6][9]=3600009LL;
    F[1][7][1]=4500000LL;
    F[2][7][1]=4500000LL;
    F[3][7][1]=4500000LL;
    F[4][7][1]=4500000LL;
    F[5][7][1]=4500000LL;
    F[6][7][1]=4500000LL;
    F[7][7][1]=1LL;
    F[1][7][2]=9000000LL;
    F[2][7][2]=9000000LL;
    F[3][7][2]=9000000LL;
    F[4][7][2]=9000000LL;
    F[5][7][2]=9000000LL;
    F[6][7][2]=9000000LL;
    F[7][7][2]=1000002LL;
    F[1][7][3]=13500000LL;
    F[2][7][3]=13500000LL;
    F[3][7][3]=13500000LL;
    F[4][7][3]=13500000LL;
    F[5][7][3]=13500000LL;
    F[6][7][3]=13500000LL;
    F[7][7][3]=3000003LL;
    F[1][7][4]=18000000LL;
    F[2][7][4]=18000000LL;
    F[3][7][4]=18000000LL;
    F[4][7][4]=18000000LL;
    F[5][7][4]=18000000LL;
    F[6][7][4]=18000000LL;
    F[7][7][4]=6000004LL;
    F[1][7][5]=22500000LL;
    F[2][7][5]=22500000LL;
    F[3][7][5]=22500000LL;
    F[4][7][5]=22500000LL;
    F[5][7][5]=22500000LL;
    F[6][7][5]=22500000LL;
    F[7][7][5]=10000005LL;
    F[1][7][6]=27000000LL;
    F[2][7][6]=27000000LL;
    F[3][7][6]=27000000LL;
    F[4][7][6]=27000000LL;
    F[5][7][6]=27000000LL;
    F[6][7][6]=27000000LL;
    F[7][7][6]=15000006LL;
    F[1][7][7]=31500000LL;
    F[2][7][7]=31500000LL;
    F[3][7][7]=31500000LL;
    F[4][7][7]=31500000LL;
    F[5][7][7]=31500000LL;
    F[6][7][7]=31500000LL;
    F[7][7][7]=21000007LL;
    F[1][7][8]=36000000LL;
    F[2][7][8]=36000000LL;
    F[3][7][8]=36000000LL;
    F[4][7][8]=36000000LL;
    F[5][7][8]=36000000LL;
    F[6][7][8]=36000000LL;
    F[7][7][8]=28000008LL;
    F[1][7][9]=40500000LL;
    F[2][7][9]=40500000LL;
    F[3][7][9]=40500000LL;
    F[4][7][9]=40500000LL;
    F[5][7][9]=40500000LL;
    F[6][7][9]=40500000LL;
    F[7][7][9]=36000009LL;
    F[1][8][1]=45000000LL;
    F[2][8][1]=45000000LL;
    F[3][8][1]=45000000LL;
    F[4][8][1]=45000000LL;
    F[5][8][1]=45000000LL;
    F[6][8][1]=45000000LL;
    F[7][8][1]=45000000LL;
    F[8][8][1]=1LL;
    F[1][8][2]=90000000LL;
    F[2][8][2]=90000000LL;
    F[3][8][2]=90000000LL;
    F[4][8][2]=90000000LL;
    F[5][8][2]=90000000LL;
    F[6][8][2]=90000000LL;
    F[7][8][2]=90000000LL;
    F[8][8][2]=10000002LL;
    F[1][8][3]=135000000LL;
    F[2][8][3]=135000000LL;
    F[3][8][3]=135000000LL;
    F[4][8][3]=135000000LL;
    F[5][8][3]=135000000LL;
    F[6][8][3]=135000000LL;
    F[7][8][3]=135000000LL;
    F[8][8][3]=30000003LL;
    F[1][8][4]=180000000LL;
    F[2][8][4]=180000000LL;
    F[3][8][4]=180000000LL;
    F[4][8][4]=180000000LL;
    F[5][8][4]=180000000LL;
    F[6][8][4]=180000000LL;
    F[7][8][4]=180000000LL;
    F[8][8][4]=60000004LL;
    F[1][8][5]=225000000LL;
    F[2][8][5]=225000000LL;
    F[3][8][5]=225000000LL;
    F[4][8][5]=225000000LL;
    F[5][8][5]=225000000LL;
    F[6][8][5]=225000000LL;
    F[7][8][5]=225000000LL;
    F[8][8][5]=100000005LL;
    F[1][8][6]=270000000LL;
    F[2][8][6]=270000000LL;
    F[3][8][6]=270000000LL;
    F[4][8][6]=270000000LL;
    F[5][8][6]=270000000LL;
    F[6][8][6]=270000000LL;
    F[7][8][6]=270000000LL;
    F[8][8][6]=150000006LL;
    F[1][8][7]=315000000LL;
    F[2][8][7]=315000000LL;
    F[3][8][7]=315000000LL;
    F[4][8][7]=315000000LL;
    F[5][8][7]=315000000LL;
    F[6][8][7]=315000000LL;
    F[7][8][7]=315000000LL;
    F[8][8][7]=210000007LL;
    F[1][8][8]=360000000LL;
    F[2][8][8]=360000000LL;
    F[3][8][8]=360000000LL;
    F[4][8][8]=360000000LL;
    F[5][8][8]=360000000LL;
    F[6][8][8]=360000000LL;
    F[7][8][8]=360000000LL;
    F[8][8][8]=280000008LL;
    F[1][8][9]=405000000LL;
    F[2][8][9]=405000000LL;
    F[3][8][9]=405000000LL;
    F[4][8][9]=405000000LL;
    F[5][8][9]=405000000LL;
    F[6][8][9]=405000000LL;
    F[7][8][9]=405000000LL;
    F[8][8][9]=360000009LL;
    F[1][9][1]=450000000LL;
    F[2][9][1]=450000000LL;
    F[3][9][1]=450000000LL;
    F[4][9][1]=450000000LL;
    F[5][9][1]=450000000LL;
    F[6][9][1]=450000000LL;
    F[7][9][1]=450000000LL;
    F[8][9][1]=450000000LL;
    F[9][9][1]=1LL;
    F[1][9][2]=900000000LL;
    F[2][9][2]=900000000LL;
    F[3][9][2]=900000000LL;
    F[4][9][2]=900000000LL;
    F[5][9][2]=900000000LL;
    F[6][9][2]=900000000LL;
    F[7][9][2]=900000000LL;
    F[8][9][2]=900000000LL;
    F[9][9][2]=100000002LL;
    F[1][9][3]=1350000000LL;
    F[2][9][3]=1350000000LL;
    F[3][9][3]=1350000000LL;
    F[4][9][3]=1350000000LL;
    F[5][9][3]=1350000000LL;
    F[6][9][3]=1350000000LL;
    F[7][9][3]=1350000000LL;
    F[8][9][3]=1350000000LL;
    F[9][9][3]=300000003LL;
    F[1][9][4]=1800000000LL;
    F[2][9][4]=1800000000LL;
    F[3][9][4]=1800000000LL;
    F[4][9][4]=1800000000LL;
    F[5][9][4]=1800000000LL;
    F[6][9][4]=1800000000LL;
    F[7][9][4]=1800000000LL;
    F[8][9][4]=1800000000LL;
    F[9][9][4]=600000004LL;
    F[1][9][5]=2250000000LL;
    F[2][9][5]=2250000000LL;
    F[3][9][5]=2250000000LL;
    F[4][9][5]=2250000000LL;
    F[5][9][5]=2250000000LL;
    F[6][9][5]=2250000000LL;
    F[7][9][5]=2250000000LL;
    F[8][9][5]=2250000000LL;
    F[9][9][5]=1000000005LL;
    F[1][9][6]=2700000000LL;
    F[2][9][6]=2700000000LL;
    F[3][9][6]=2700000000LL;
    F[4][9][6]=2700000000LL;
    F[5][9][6]=2700000000LL;
    F[6][9][6]=2700000000LL;
    F[7][9][6]=2700000000LL;
    F[8][9][6]=2700000000LL;
    F[9][9][6]=1500000006LL;
    F[1][9][7]=3150000000LL;
    F[2][9][7]=3150000000LL;
    F[3][9][7]=3150000000LL;
    F[4][9][7]=3150000000LL;
    F[5][9][7]=3150000000LL;
    F[6][9][7]=3150000000LL;
    F[7][9][7]=3150000000LL;
    F[8][9][7]=3150000000LL;
    F[9][9][7]=2100000007LL;
    F[1][9][8]=3600000000LL;
    F[2][9][8]=3600000000LL;
    F[3][9][8]=3600000000LL;
    F[4][9][8]=3600000000LL;
    F[5][9][8]=3600000000LL;
    F[6][9][8]=3600000000LL;
    F[7][9][8]=3600000000LL;
    F[8][9][8]=3600000000LL;
    F[9][9][8]=2800000008LL;
    F[1][9][9]=4050000000LL;
    F[2][9][9]=4050000000LL;
    F[3][9][9]=4050000000LL;
    F[4][9][9]=4050000000LL;
    F[5][9][9]=4050000000LL;
    F[6][9][9]=4050000000LL;
    F[7][9][9]=4050000000LL;
    F[8][9][9]=4050000000LL;
    F[9][9][9]=3600000009LL;
}

2.正解(来自lemonoil)

#include<set>
#include<list>
#include<deque>
#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<string>
#include<vector>
#include<ctime>
#include<stack>
#include<map>
#define clr(x) memset((x),0,sizeof(x))
#define cld(x) memset((x),127/2,sizeof(x))
#define smin(x,y) x=min(x,y)
#define smax(x,y) x=max(x,y)
#define res(i,x,y) for(int i=x;i<=y;i++)
#define rez(i,x,y) for(int i=x;i>=y;i--)
#define INF 2100000000
#define MOD 1000000007
#define ll long long
#define N 1000005
#define P 65536
#define NAME "count"
using namespace std;
inline void readin(int &resez){
    static char ch;
    while((ch=getchar())<'0'||ch>'9');
        resez=ch-48;
    while((ch=getchar())>='0'&&ch<='9')
        resez=resez*10+ch-48;
}
int sum[10],n;
ll ans;
void countnum(){
    res(i,0,9)
        sum[i]=0;
    for(int k=0,s=0,tot=1;n>0;k++,n/=10,tot*=10){
        int c;
        c=n%10;
        res(i,1,9)        
            sum[i]+=c*k*tot/10;          
        res(i,0,c-1)        
            sum[i]+=tot;           
        sum[c]+=1+s;            
        sum[0]-=tot;
        s+=c*tot;
    }
}
int main(){
    freopen(NAME".in","r",stdin);
    freopen(NAME".out","w",stdout);
    readin(n);
    countnum();
    res(i,1,9)ans+=sum[i]*i;
    cout<<ans<<endl;
    return 0;   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值