題意:定義s(
n)是n
的數字之和,給出一對a,
b(0b<
101)
,求是否存在
n 滿足a×
s(n)
=b×s
(2n)
對於n中的任何乙個數字x,若x為0-4,則因為沒有進製,所以在s(2n)中貢獻為2x;若x為5-9,則由於其超過10,在s(2n)中貢獻為2x-10+1.這裡不用擔心因為進製會使得高位又滿10進製,事實上前一位最多為2*9=18或者是單純的8,不可能出現9.x位數
s(n)
s(2n
)
0~4x
2x5~9lx
2x-9
可見只有5~9的位數使s(
n)與s
(2n)
有了差異,即s(
2n)=
2s(n
)−9l
,代入原式,s(
n)簡記
為s a
×s=b
×(2s
−9l)
則(2b−a)
s=9b
l 1. a=2b,則l=0,s為任意值。可得最小的n=1;
2. a>2b,則l<0,矛盾!則無滿足的n,輸出0;
3. a<2b, s=
9bl2
b−a≤
5l(至少有l個5),即必須滿足b≤
5a,否則無滿足的n,輸出0。
繼續討論上述第三種情況,由於分母為2b-a,l周期性地使得右邊式子可以整除,現在只要求出最小的l,列舉範圍從1到2b-a必定會有滿足的l。
得到一組滿足的(l,s),構造最小的n。首先先要在後l位塞滿5,剩下的(s-5l)開始從個位到高位塞4,直到塞完為止。
問題來了,既然l可以取多個,怎麼保證最小的l使得n最小?
假設l』=l+x,s′
=9b(
l+x)
2b−a
原來的位數(大約)是(除以4的地方應該加個向上取整)9b
l(2b
−a)−
9l4+
l 現在的位數是9b
(l+x
)(2b
−a)−
9(l+
x)4+
(l+x
) 後面減前面,差值是9b
x(2b
−a)−
9x4+
x=5a
−b4(
2b−a
)x又有條件b≤
5a,則這個差值大於等於0.位數大的數肯定比原來大了。所以最小的l可以得到最小的n.
/*--------------------------------------------
* file name: hdu 5710
* author: danliwoo
* mail: [email protected]
* created time: 2016-07-05
17:09:58
--------------------------------------------*/
#include
#include
#include
#include
#include
#include
using namespace std;
#define n 1000
int ans[n], a, b;
void solve()
if(a > 2
*b || 5
*a< b)
int l, s;
for(l = 1;l < 1000;l++)
memset(ans, 0, sizeof(ans));
for(int i = 0;i < l;i++)
ans[i] = 5;
s -= l*5;
int len;
for(int i = 0;;i++) else
}len = max(len, l);
for(int i = len-1;i >= 0;i--)
printf("%d", ans[i]);
printf("\n");
}int main()
}
P5710 深基3 例2 數的性質
題目描述 一些數字可能擁有以下的性質 性質 1 是偶數 性質 2 大於 4 且不大於 12。小a 喜歡這兩個性質同時成立的數字 uim 喜歡這至少符合其中一種性質的數字 八尾勇喜歡剛好有符合其中乙個性質的數字 正妹喜歡不符合這兩個性質的數字。輸入格式 輸入乙個數字 x 0 x 1000 輸出格式 輸...
卡特蘭數 hdu1130 hdu1133
題意 給定一棵n個節點的二叉樹,求這棵樹有多少個二叉樹。資料範圍 n 100 思路 n個節點的二叉樹有多種,多種二叉樹裡面又有子樹。當n到達100時,結果是乙個龐大的數字,所以要用到大數。在卡特蘭數的應用裡面,求二叉樹的個數是乙個典型的應用,還有 合法的入棧出棧序列數 多邊形分成三角形的個數 圓括弧...
hdu 水仙花數
problem description 春天是鮮花的季節,水仙花就是其中最迷人的代表,數學上有個水仙花數,他是這樣定義的 水仙花數 是指乙個三位數,它的各位數字的立方和等於其本身,比如 153 1 3 5 3 3 3。現在要求輸出所有在m和n範圍內的水仙花數。input 輸入資料有多組,每組佔一行,...