HiHoCoder1033交錯和 數字dp

2021-07-26 11:18:48 字數 1527 閱讀 3195

給定乙個數 x,設它十進位制展從高位到低位上的數字依次是 a0

,a1,

...,

an−1

,定義交錯和函式:f(

x)=a

0−a1

+a2−

...+

(−1)

n−1a

n−1

例如:f

(3214567)=

3−2+

1−4+

5−6+

7=4

給定 l, r, k,求在 [l, r] 區間中,所有 f(x) = k 的 x 的和,即:∑i

=lr[

f(i)

==k]x

輸入資料僅一行包含三個整數,l, r, k(0

≤l≤r

≤1018 , |k| ≤ 100)。

輸出一行乙個整數表示結果,考慮到答案可能很大,輸出結果模 109 + 7。

對於樣例 ,滿足條件的數有 110 和 121,所以結果是 231 = 110 + 121。

input

4344 3214567 3

output

611668829

input

404491953 1587197241 1

output

323937411

input

60296763086567224 193422344885593844 10

output

608746132

input

100 121 -1

output

120100 121 0

比較模板的數字dp的題,我們定義dp[i][j][k]表示第i位和為j狀態為k時的x的和和數量,然後進行轉移就行了。

#include 

using namespace std;

typedef long long ll;

const ll mod = 1e9+7;

struct node dp[65][410][2];

ll cm[21];

int bite[70],dnum,len;

void getbite(ll n)

}node dfs(int

pos,int aim,bool limits,bool front)

return rs;

}if(!limits && !front && dp[pos][aim][len%2].num !=-1)

int end = limits?bite[pos]:9;

for(int i = front;i<=end;i++)

if(!limits && !front)

return rs;

}ll getans(ll n,int

x) return ans;

}void init()

}ll l,r;

int aim;

int main()

Hihocoder 數列問題

給定乙個長度為n數列a a1,a2,an a 1,a 2,a n a1 a2 an 由於某種原因,小ho對這個數列有些不滿意。他希望每個在數列 現的數值,其出現的次數都是唯一的。假設a 1,1,2,2 1和2都出現了2次,小ho就會不滿意。於是小ho決定從a中刪除一些數,使得每個數值出現次數都是唯一...

hihocoder 字尾陣列

時間限制 5000ms 單點時限 1000ms 記憶體限制 256mb 描述小hi平時的一大興趣愛好就是演奏鋼琴。我們知道乙個 旋律被表示為長度為 n 的數構成的數列。小hi在練習過很多曲子以後發現很多作品自身包含一樣的旋律。旋律是一段連續的數列,相似的旋律在原數列可重疊。比如在1 2 3 2 3 ...

HihoCoder 跑馬圈地

原題鏈結 問題 在乙個m n的矩形中,圈出一塊最大周長為l的連續區域,滿足區域面積盡可能大,同時區域邊界不能落入內部特定的矩形內。分析 1 當周長固定時,圍成正方形覆蓋的面積最大 2 考慮到矩形的對稱性,內部矩形位置 陰影區域 可表示為如下圖所示形式,即滿足 s1 s3 且 s1 s2 且 s3 s...