P2657 [SCOI2009] windy 数

原题链接

题解

一个细节坑我好久

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll f[15][15]={0};//从最高位第i位数字为j时的数字里有多少windy数
ll solve(ll now)
{
    now++;//小于等于变小于
    ll len=0;
    ll num[15]={0};
    while(now)
    {
        len++;
        num[len]=now%10;
        now/=10;
    }
    ll sum=0;

    for(int i=len;i>=2;i--)
    {
        for(int j=1;j<=9;j++) sum+=f[i-1][j];
    }

    for(int i=1;i<num[len];i++) sum+=f[len][i];

    for(int i=len-1;i>=1;i--)
    {
        for(int k=0;k<num[i];k++) if(abs(num[i+1]-k)>=2)sum+=f[i][k];
        if(abs(num[i]-num[i+1])<2) break;//细节 
    }


    return sum;
}

int main()
{

    for(int i=0;i<=9;i++) f[1][i]=1;
    for(int i=2;i<=10;i++)
    {
        for(int j=0;j<=9;j++)
        {
            for(int k=0;k<=9;k++)
            {
                if(abs(k-j)>=2) f[i][j]+=f[i-1][k];
            }
        }
    }


    ll a,b;
    cin>>a>>b;
    cout<<solve(b)-solve(a-1);

    return 0;
}

posted @   纯粹的  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示