題目描述
如果把乙個數的某一位當成支點,且左邊的數字到這個點的力矩和等於右邊的數字到這個點的力矩和,那麼這個數就可以被叫成槓桿數。
比如4139就是槓桿數,把3當成支點,我們有這樣的等式:4 * 2 + 1 * 1 = 9 * 1。
給定區間[x,y],求出在[x,y]中有幾個槓桿數。
輸入格式
兩個數,表示x,y。
輸出格式
乙個輸出,表示區間[x,y]中槓桿數的個數。
輸入輸出樣例
輸入 #1 複製
7604 24324
輸出 #1 複製
897說明/提示
對於40%的資料,x<=y<=x+100000
對於100%的資料,1<=x<=y<=10^18
數字dp
我們可以列舉支點的位置,對於每個滿足條件的數,它所對應的支點是唯一的,原因是如果將支點右移,左邊減去右邊的差將嚴格單調增加。state表示力矩和(支點左邊加支點右邊),所以當state<0時,當前這個數不滿足以i為支點成為槓桿數的情況,返回0。但當state==0時並不能就ans++了,因為當前列舉的位置可能還沒列舉完。
列舉好支點,問題就轉化為:求[1,x]中,以第i位為支點的槓桿數的個數。
#include
#define ll long long
using
namespace std;
const
int n=20;
ll f[n]
[n][
3000];
int a[n]
;ll dfs
(int pos,
int p,
int s,
bool bz)
ll solve
(ll x)
ll ans=0;
for(
int i=
1; i<=len; i++
) ans+
=dfs
(len,i,0,
1);return ans-len+1;
}int
main()
windy 數(還是數字dp
windy定義了一種windy數。不含前導零且相鄰兩個數字之差至少為2的正整數被稱為windy數。windy想知道,在a和b之間,包括a和b,總共有多少個windy數?input 包含兩個整數,a b。output 乙個整數 sample input 輸入樣例一 110 輸入樣例二 2550 sam...
數字DP入門 數字DP模板
數字dp是一種計數用的dp,一般就是要統計乙個區間 le,ri 內滿足一些條件數的個數。所謂數字dp,字面意思就是在數字上進行dp咯。數字還算是比較好聽的名字,數字的含義 乙個數有個位 十位 百位 千位.數的每一位就是數字啦!之所以要引入數字的概念完全就是為了dp。數字dp的實質就是換一種暴力列舉的...
數字dp模版(dp)
1 include 2 include 3 include 4 include 5 6using namespace std 78 intt 9long long dp 19 19 2005 10 long long l,r 11int shu 20 12 13long long dfs int l...