小明完成了這樣乙個數字生成遊戲,對於乙個不包含00的數字ss來說,有以下33種生成新的數的規則:
將ss的任意兩位對換生成新的數字,例如143143可以生成314,413,134314,413,134;
將ss的任意一位刪除生成新的數字,例如143143可以生成14,13,4314,13,43
在ss的相鄰兩位之間s_i,s_si,si+1之間插入乙個數字x,x需要滿足s_i
現在小明想知道,在這個生成法則下,從ss開始,每次生成乙個數,可以用然後用新生成的數生成另外乙個數,不斷生成直到生成tt至少需要多少次生成操作。
另外,小明給規則33又加了乙個限制,即生成數的位數不能超過初始數ss的位數。若ss是143143,那麼12431243與13431343都是無法生成的;若ss為14431443,那麼可以將ss刪除變為143143,再生成12431243或13431343。
輸入格式:
第一行包含11個正整數,為初始數字ss。
第二行包含乙個正整數mm,為詢問個數。
接下來mm行,每行乙個整數tt(tt不包含00),表示詢問從ss開始不斷生成數字到tt最少要進行多少次操作。任兩個詢問獨立,即上乙個詢問生成過的數到下乙個詢問都不存在,只剩下初始數字ss。
輸出格式:
共mm行,每行乙個正整數,對每個詢問輸出最少運算元,如果無論如果無論也變換不成,則輸出-1−1。
輸入樣例#1:複製
1433
134133
32輸出樣例#1:複製1-1
4143143 ->134134
133133無法得到
143143 -> 1313 -> 123123 ->2323->3232
對於20%20%的資料,s < 100s<100;
對於40%40%的資料,s < 1000s<1000;
對於40%40%的資料,m < 10m<10;
對於60%60%的資料,s < 10000s<10000;
對於100%100%的資料,s < 100000,m ≤ 50000s<100000,m≤50000。
爆搜沒了
#include#include#include#include#include#define ll long long
using namespace std;
queue q;
int i,m,n,j,k,a[2000011],b[2000011],s,f[10001],sdf,cnt;
int zh(int *a,int k)
void bfs()
if(l!=n)}}
for(int i=1;i<=l;i++)
for(int j=1;j<=l;j++)
}}int main()
}
洛谷P1132 數字生成遊戲
小明完成了這樣乙個數字生成遊戲,對於乙個不包含0的數字s來說,有以下3種生成新的數的規則 將s的任意兩位對換生成新的數字,例如143可以生成314,413,134 將s的任意一位刪除生成新的數字,例如143可以生成14,13,43 在s的相鄰兩位之間s i s i 1 之間插入乙個數字x,x需要滿足...
P1043 數字遊戲
丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k...
P1043 數字遊戲
給乙個由 n nn 個數組成的環,講環拆成 m mm 份,每份求和最後相乘,求最大 最小值。一道區間 dpdp dp題,首先因為是環,常規做法就是拆環,用兩倍數組裝,又要對每份求和,那就需要用到字首和。陣列 dp i j dp i j dp i j 表示將 j jj 個數分成 i ii 份的最大 最...