給定乙個數 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...