ARC075F Mirrored 搜尋 數字dp

2022-08-05 05:30:17 字數 1310 閱讀 1764

​ 給定正整數dd,求有多少個正整數nn,滿足rev(n)=n+drev(n)=n+d,其中rev(n)rev(n)表示將nn的十進位制表示翻轉來讀得到的數

​ 乙個正整數dd

​ 滿足上述條件的正整數的個數

case 1:

63case 2:

75case 3:

864197532

case 1:

2case 2:

0case 3:

1920

​ 1≤d≤1091≤d≤109

​ 樣例1解釋:81=18+63,92=29+63

我們把題目轉化成rev(n)-n=d,然後折半搜尋,只搜一半,另一半可以直接計算,這樣的複雜度為\(o(2^)\)左右。

然而還是有更強的做法的,這個不用搜。。可以dp。。而且複雜度只有\(o(d^2*10)\),具體地,在這裡:orzdtz,寫得非常詳細。

搜尋:

#include #define ll long long

using namespace std;

int d,cnt[19],ans;ll b[20];

void dfs(int x,ll res,int l,int now)

ll i=-9ll;while(i<9ll&&res+(i+1ll)*(b[l-x-1]-b[x])<=d) ++i;

dfs(x+1,res+i*(b[l-x-1]-b[x]),l,now*(x==0&&i>=0?cnt[i+9]-1:cnt[i+9]));

if(++i<=9) dfs(x+1,res+i*(b[l-x-1]-b[x]),l,now*(x==0&&i>=0?cnt[i+9]-1:cnt[i+9]));

}int main()

dp:

#include using namespace std;

int d[10005],f[10005][2][2],l,ans,lim,p=1e9+7;char d[10005];

int dp(int n)

if(n&1) for(int j=0,mid=(n+1)>>1;j<2;j++) for(int k=0;k<2;k++) if(f[m][j][k]) for(int x=0,y;x<10;x++)

if(!(n&1)) for(int j=0;j<2;j++) (res+=f[m][j][j])%=p;

return res;

}int main()

ARC075 E 離散化 樹狀陣列 水

題目大意 給你乙個長度為n的序列。問你有多少個子段滿足其算數平均和 k geq k k.n 1 e5,k 1e9 n leq 1e5,k leq 1e9 n 1e5,k 1e 9 題目思路 題目條件可以轉化為 sum r sum l 1 r l 1 k frac leq k r l 1s um r ...

ARC與非ARC混用

隨著arc管理記憶體技術的日漸成熟,人們慢慢傾向於在自己的專案裡使用arc。由於原先一直都是手動管理記憶體的,所以就要考慮怎麼樣在非arc的工程裡用使用arc進行編譯的檔案 類庫。好在這樣的混用十分的簡單。只要對相應的檔案進行一項簡單的設定就成。操作步驟如下 1 選擇專案中的targets,選中你所...

075 Photoshop基礎入門

沒想到啊沒想到 我也開始學photoshop了 沒想到啊沒想到 我也有今天 1.選擇工具 v 1.自動選擇 2.顯示變換控制項 定界框 3.縮放 shift等比例 4.縮放,旋轉,翻轉 5.ctrl t 自由變換 6.多選圖層一起變換 7.選組或者選圖層 8.垂直居中,水平居中 2.選區工具 m 1...