题解 | 信息学奥赛一本通 Windy 数

Windy 数

https://ac.nowcoder.com/acm/contest/973/C

思路

简单的数位DP题.
预处理出表示位,最高位为的Windy数有多少.
然后将范围转换为前缀和(这是有多套路qwq),从高位枚举到低位,加上选小于当前位的数的合法方案数,如果当前位到顶,继续枚举低位.然后别忘了最后答案+1.(一切都是多么经典qwq)
算法复杂度为.

代码

#include<bits/stdc++.h>
using namespace std;
#define i64 long long
#define fp( i, b, e ) for ( int i(b), I(e); i <= I; ++i )
#define fd( i, b, e ) for ( int i(b), I(e); i >= I; --i )
#define go( i, b ) for ( int i(b), v(to[i]); i; v = to[i = nxt[i]] )
template<typename T> inline void cmax( T &x, T y ){ x < y ? x = y : x; }
template<typename T> inline void cmin( T &x, T y ){ y < x ? x = y : x; }

clock_t t_bg, t_ed;
int f[15][15], w[15], n;
int calc( int x ){
    if ( !x ) return 0;
    n = 0; while( x ) w[++n] = x % 10, x /= 10;
    int ans(0), c(88); fd( i, n - 1, 1 ) fp( j, 1, 9 ) ans += f[i][j];
    fd( i, n, 1 ){
        fp( j, i == n, w[i] - 1 ){
            if ( abs(j - c) > 1 ){
                ans += f[i][j];
            }
        } if ( abs(w[i] - c) > 1 ) c = w[i]; else return ans;
    } return ans + 1;
}

signed main(){
    t_bg = clock();
    fp( i, 0, 9 ) f[1][i] = 1;
    fp( i, 2, 10 ) fp( j, 0, 9 ){
        fp( k, 0, j - 2 ) f[i][j] += f[i - 1][k];
        fp( k, j + 2, 9 ) f[i][j] += f[i - 1][k];
    } int x, y; scanf( "%d%d", &x, &y ), printf( "%d\n", calc(y) - calc(x - 1) );
    t_ed = clock();
    fprintf( stderr, "\n========info========\ntime : %.3f\n====================\n", (double)( t_ed - t_bg ) / CLOCKS_PER_SEC );
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1152487次浏览 17153人参与
# 通信和硬件还有转码的必要吗 #
11234次浏览 101人参与
# OPPO开奖 #
19282次浏览 268人参与
# 和牛牛一起刷题打卡 #
19066次浏览 1635人参与
# 实习与准备秋招该如何平衡 #
203482次浏览 3628人参与
# 大厂无回复,继续等待还是奔赴小厂 #
4993次浏览 31人参与
# 不去互联网可以去金融科技 #
20605次浏览 258人参与
# 通信硬件薪资爆料 #
266003次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2235次浏览 34人参与
# 互联网公司评价 #
97728次浏览 1280人参与
# 简历无回复,你会继续海投还是优化再投? #
25040次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454957次浏览 5125人参与
# 国企和大厂硬件兄弟怎么选? #
53925次浏览 1013人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14647次浏览 349人参与
# 硬件人的简历怎么写 #
82294次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19410次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
28386次浏览 248人参与
# 学历对求职的影响 #
161271次浏览 1804人参与
# 你收到了团子的OC了吗 #
538834次浏览 6389人参与
# 你已经投递多少份简历了 #
344308次浏览 4963人参与
# 实习生应该准时下班吗 #
97007次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63528次浏览 622人参与
牛客网
牛客企业服务