The executive officers of the company where you work want to send each other encrypted messages. Rather than use off-the-shelf encryption software such as PGP, they have tasked the IT staff with handling the encryption problem. The IT staff decided on a solution that requires
private integer keys. The idea is that everyone can see your public key, but only you know your private key.
Your best friend in the company is a wonderful person but a not-so-wonderful programmer. He has created a publicprivate key scheme as follows. A public key can be any positive integer. The corresponding private key is the smallest bipartite number that is greater than and a multiple of the public key.
A bipartite number is any positive integer that contains exactly 2 distinct decimal digits s and t such that s is not 0 and all occurrences of s precede all occurrences of t. For example 44444411 is bipartite (s is 4 and t is 1), So are 41, 10000000, and 5555556. However, neither 4444114 nor 44444 are bipartite.
Notice that the large bipartite number 88888888888800000 can be nicely described as 12 8’s followed by 5 0’s. You can express any bipartite number using four numbers: m s n t. The numbers s and t are the leading and trailing digits as described above, m is the number of times the digit s appears in the bipartite number, and n is the number of times the digit t appears.
The trouble with your friend’s scheme is that it is not too difficult to compute a private key if you know the public key. You need to convince your friend that his public-private key scheme is inadequate before he loses his job over his bad decision! You must write a program that takes public keys as input and displays the corresponding private keys.
The input consists of several test cases. Each test case is on a separate line, and it consists of a single public key in the range 1…99999.
The last case is followed by a line containing the integer zero.
For each test case, display a line consisting of the public key, a colon, then 4 integers m s n t where m, n, s, and t are as described above.
Claimer: The data used in this problem is unofficial data prepared by Derek Kisman. So any mistake here does not imply mistake in the offcial judge data. Only Derek Kisman is responsible for the mistakes. Report mistakes to firstname.lastname@example.org
現在找一個 public key，這個 public key 符合 format
xxx...xyyy...y，其中 x, y 是
而你的 private key N 是給定的，接著找一個符合規定的 public key，是 N 的倍數且最大於 N 的最小值。
88888888888800000 沒有任何意義。可能會超過好幾位，連 long long 64 bits 都裝不下。
public key > N 會有點麻煩。
- 一開始嘗試在最大值下面建表查找，但卡了很多 WA，後來發現不合理的測資。
- 之後採用類似最短路徑的 BFS，藉由狀態
但是這樣做還是很容易 TLE，我們特別對 10 的倍數作調整，這些亂做不好說明。