給定正整數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...