分析:顯然是一道數字dp題,不過需要一些奇怪的姿勢.常規的數字dp能統計出乙個區間內滿足條件的數的個數,可是我們要求第k個,怎麼辦呢?轉化為經典的二分問題,我們二分當前數的大小,看它是第幾大的,就可以了.
顯然數字dp套上模板,再用上kmp的next陣列就可以了,傳遞4個引數:還剩下多少位沒有匹配,匹配了多少位,是否達到上限和是否匹配成功,到最後判斷一下就可以了.
學到了一種很強的思想:如果能求出i是第幾個數,要求出第k個數就可以二分i的值.
#include #include#include
#include
using
namespace
std;
long
long l, r, k, f[20][2010][2
];int m, nextt[40], a[30
];char x[100
];void
init()
}long
long dfs(int len, int w, bool limit, bool
flag)
return limit ? cnt : f[len][w][flag] =cnt;
}long
long query(long
long
u) memset(f, -1, sizeof
(f));
return dfs(cnt, 0, 1, 0);}
intmain()
long
long t = query(l - 1),ans =l;
long
long l = l, r =r;
while (l
else
l = mid + 1
; }
printf(
"%lld\n
", r);
return0;
}
清北學堂模擬賽d3t6 c
分析 比較神奇的一道題.要把樹變成環肯定要先變成鏈,然後把鏈給拼接成環.接下來考慮乙個腦洞大開的樹形dp 設f i 0 表示i不與父節點相連的鏈數,f i 1 表示i與父節點相連的鏈數,先考慮怎麼轉移f i 0 如果i不與父節點相連,那麼i肯定與兩個子節點相連,其它的子節點都不與父節點相連,而且要剪...
清北學堂模擬賽d3t1 a
問題描述 你是能看到第一題的friends呢。hja 怎麼快速記單詞呢?也許把單詞分類再記單詞是個不錯的選擇。何大爺給出了一種分單詞的方法,何大爺認為兩個單詞是同一類的當這兩個單詞的各個字母的個數是一樣的,如dog和god。現在何大爺給了你 個單詞,問這裡總共有多少類單詞。輸入格式 第一行乙個整數n...
清北學堂模擬賽d3t3 c
分析 一開始拿到這道題真的是無從下手,暴力都很難打出來.但是基本的方向還是要有的,題目問的是方案數,dp不行就考慮數學方法.接下來比較難想.其實對於每一行或者每一列,我們任意打亂順序其實對答案是沒有影響的.那麼我們按照高度從大到小對行和列進行排序,單獨考慮所有高度相等的行和列,組成了乙個l形,如果我...