日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ 5379. 【NOIP2017提高A组模拟9.21】Victor爱数字

發(fā)布時(shí)間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5379. 【NOIP2017提高A组模拟9.21】Victor爱数字 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description

Victor 是一名熱愛數(shù)字的同學(xué)。他最近在思考這樣一個(gè)問題:
一個(gè)字符串是回文的當(dāng)且僅當(dāng)它倒過來還和原來相同。那么如果一個(gè)數(shù)的數(shù)串沒有一個(gè)長(zhǎng)度超過1 的子串是回文串的話,它就是palindrome-free 的。例如:16276 是palindrome-free的,而17276 不是,因?yàn)樗嘶匚拇?27。
Victor 想知道在a 到b 的區(qū)間內(nèi),有多少個(gè)數(shù)是palindrome-free 的。

Input

從文件numbers.in 中讀入數(shù)據(jù)。
包括兩個(gè)數(shù)字a,b。

Output

輸出到文件numbers.out 中。
輸出包含一個(gè)整數(shù):區(qū)間a,…,b 中palindrome-free 的數(shù)的總個(gè)數(shù)(包括a,b)。

Sample Input

輸入1:

123 321

輸入2:

123456789 987654321

Sample Output

輸出1:

153

輸出2:

167386971

Data Constraint

對(duì)于16% 的數(shù)據(jù),b - a <= 200。
對(duì)于24% 的數(shù)據(jù),b - a <= 10^5。
對(duì)于32% 的數(shù)據(jù),b - a <= 10^6。
對(duì)于100% 的數(shù)據(jù),0 <= a <= b <= 10^18

Solution

  • 這道題是一道典型的數(shù)位DP,即根據(jù)枚舉數(shù)位來統(tǒng)計(jì)結(jié)果的動(dòng)態(tài)規(guī)劃。

  • 套路設(shè) Work(x) 表示從 0x 的答案,則答案即為 Work(b)?Work(a?1)

  • 因?yàn)榛匚闹恍枧袛嚅L(zhǎng)度為 23 的中心串即可,

  • 于是設(shè)出狀態(tài) F[i][j][k][l] 表示填了 i 位、 上兩位為jl 限制越界0/1 的方案數(shù)。

  • 為方便轉(zhuǎn)移,k0(第 1i 為前導(dǎo) 0)、1(第 1i?1 為前導(dǎo) 0) 或 2 (其他情況)。

  • 答案即為 F[n][i][j][k]

Code

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; long long n,m; int a[20]; long long f[20][100][3][2]; inline long long work(long long x) {for(a[0]=0;x;x/=10) a[++a[0]]=x%10;reverse(a+1,a+1+a[0]);memset(f,0,sizeof(f));f[0][0][0][1]=1;for(int i=0;i<a[0];i++)for(int j=0;j<=99;j++)for(int k=0;k<2;k++)if(k){for(int l=0;l<a[i+1];l++){if(!l) f[i+1][j%10*10+l][0][0]+=f[i][j][0][1]; elsef[i+1][j%10*10+l][1][0]+=f[i][j][0][1];if(j<=9 && j && j!=l) f[i+1][j%10*10+l][2][0]+=f[i][j][1][1];if(j%10!=l && j/10!=l) f[i+1][j%10*10+l][2][0]+=f[i][j][2][1];}if(!a[i+1]) f[i+1][j%10*10+a[i+1]][0][1]+=f[i][j][0][1]; elsef[i+1][j%10*10+a[i+1]][1][1]+=f[i][j][0][1];if(j<=9 && j && j!=a[i+1]) f[i+1][j%10*10+a[i+1]][2][1]+=f[i][j][1][1];if(j%10!=a[i+1] && j/10!=a[i+1]) f[i+1][j%10*10+a[i+1]][2][1]+=f[i][j][2][1];}elsefor(int l=0;l<=9;l++){if(!l) f[i+1][j%10*10+l][0][0]+=f[i][j][0][0]; elsef[i+1][j%10*10+l][1][0]+=f[i][j][0][0];if(j<=9 && j && j!=l) f[i+1][j%10*10+l][2][0]+=f[i][j][1][0];if(j%10!=l && j/10!=l) f[i+1][j%10*10+l][2][0]+=f[i][j][2][0];}long long sum=0;for(int i=0;i<=99;i++)for(int j=0;j<3;j++)for(int k=0;k<2;k++)sum+=f[a[0]][i][j][k];return sum; } int main() {scanf("%lld%lld",&n,&m);printf("%lld",work(m)-work(n-1));return 0; }

總結(jié)

以上是生活随笔為你收集整理的JZOJ 5379. 【NOIP2017提高A组模拟9.21】Victor爱数字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。