【題目描述】
單身!依然單身!
吉哥依然單身!
ds 級碼農吉哥依然單身!
所以,他平生最恨情人節,不管是 214 還是 77 ,他都討厭!
吉哥觀察了 214 和 77 這兩個數,發現:
2+1+4=7
7+7=7×2
77=7×11
最終,他發現原來這一切歸根到底都是因為和 7 有關!所以,他現在甚至討厭一切和 7 有關的數!
什麼樣的數和 7 有關呢?如果乙個整數符合下面三個條件之一,那麼我們就說這個整數和 7 有關:
整數中某一位是 7 ;
整數的每一位加起來的和是 7 的整數倍;
這個整數是 7 的整數倍。
現在問題來了:吉哥想知道在一定區間內和 7 無關的數字的平方和。
【輸入】
輸入資料的第一行是測試資料組數 t ,然後接下來的 t 行表示 t 組測試資料。
每組資料在一行內包含兩個正整數 l,r
【輸出】
對於每組資料,請計算 [l,r] 中和 7 無關的數字的平方和,並將結果對 109+7 取模後輸出。
【樣例輸入 】
31 9
10 11
17 17
【樣例輸出】
2362210提示
對於全部資料,1≤t≤50,1≤l≤r≤1018
顯然是數字dp的題。
限制條件都是很樸素的,常規操作解決。
那麼這道題的問題在於我們需要維護平方和。
那麼對於當前的第p位,平方和:
q su
m=∑(
ai+b
∗10p
−1
)qsum=\sum(ai+b*10^)
qsum=∑
(ai+
b∗10
p−1)
其中ai表示p-1位搜到的每個合法的數。
那麼拆開我們可以得到:
q su
m=∑a
i2+∑
(b∗1
0p−1
)2+2
∗(b∗
10p−
1)∗∑
(ai)
qsum=\sum ai^+\sum (b*10^)^+2*(b*10^)*\sum(ai)
qsum=∑
ai2+
∑(b∗
10p−
1)2+
2∗(b
∗10p
−1)∗
∑(ai
)對於當前狀態,b的10的冪顯然已知。
對於第一項,我們直接維護平方和;
對於第二項,我們需要維護ai的個數;
對於第三項,我們需要維護ai的和;
因此問題就解決了。
**:
#include
#include
#include
#include
#include
#include
#define re register
#define ll long long
using
namespace std;
ll n,m,a,b,c;
ll mod=
1e9+7;
struct nodef[20]
[7][
7];//位數 數字之和 原數mod7的餘數
ll q[
10001
],len=0;
ll lo[
10001];
node dfs
(ll pos,ll sum1,ll sum2,
bool lim)if(
!lim && f[pos]
[sum1]
[sum2]
.num!=-1
)return f[pos]
[sum1]
[sum2]
; ll up=lim?q[pos]:9
; ll sum=
0,qsum=
0,num=0;
for(ll re i=
0;i<=up;i++)if
(!lim)f[pos]
[sum1]
[sum2]
=(node)
;return
(node);}
ll ask
(ll x)
return
dfs(len,0,
0,1)
.qsum;
}int
main()
}
數字dp(恨7不成妻)
hdu 4507 吉哥系列故事 恨7不成妻 數字dp 思路 想必普通的統計滿足條件的個數都會吧,這裡就不在贅述了,dp i j k 代表長度為i,數字對7取餘數為j,數字各個位數加起來對7取餘數k 僅僅用dp i j k 的值代表個數是不能得到答案的,還要統計滿足條件的和還有平方和 開結構體,維護和...
恨 7 不成妻
求出一段區間內與 7 無關的數的平方和,我們定義這個數與 7 有關當且僅當這個數滿足下列條件之一 1 某一位為 7 2 數字和為 7 的倍數 3 這個數本身是 7 的倍數。這題並不算裸的數字 dp 題,顯然如果對於計數我們很容易得到這個區間內滿足條件的個數,而為了使數字 dp 的 dp 能夠有子狀態...
HDU 4507 恨7不成妻(數字dp )
題目 求在一定區間內和7無關的數字的平方和。如果乙個整數符合下面3個條件之一,那麼我們就說這個整數和7有關 1 整數中某一位是7 2 整數的每一位加起來的和是7的整數倍 3 這個整數是7的整數倍 基本思想是 x y 2 x 2 2 x y y 2 維護sum和sqrt sum,以及數量cnt來確定用...