造計算機神題。給一個忠告:珍愛生命,遠離曠野大計算......
代碼在這裏:戳我ubuntu
給定\(a,b\);求\(-2a-2b\)。數組
熟悉操做環境:\([-(a+b)]<<1\),共\(6\)次操做。函數
給定\(a\);求\(\frac{1}{1+e^{17a}}\)。spa
熟悉關鍵函數及操做:\(s(-((a<<4)+a))\),共\(6\)次操做。翻譯
給定\(a\),求\(fu(a)\),其中\(fu(a) = \{-1,0,1\}\)。設計
能夠發現\(s(x)\)在\(x\to \infty\)時\(\to 1\),在\(x\to -\infty\)時\(\to 0\)。
因此經過放縮就可以實現正、\(0\)、負數的區分了,即\([s(a<<500)-0.5]<<1\),共\(6\)次操做。排序
給定\(a\);求\(|a|\)。get
最爲關鍵的一檔部分分。
首先\(s'(x)=\frac{e^{-x}}{(1+e^{-x})^2}\),\(s'(0)=\frac{1}{4}\),因此當\(x\to 0\),則\(s(x)\to \frac{x}{4}+\frac{1}{2}\)。
因此考慮用\(x\to 0\)時的\(s(x)\)構造咱們須要的值。
考慮\(INFs(INFx)=[\{INF,x>0\},\{0,x<0\}]\)。
那麼\(s(\frac{x}{INF}+INFs(INFx))=[\{1,x>0\},\{\frac{x}{4INF}+\frac{1}{2},x<0\}]\),而後對着構造便可。
至於\(0\)的尷尬處境,經過加\(eps\)解決,令\(b=a+eps\)。
操做爲:\(-8INF([s(\frac{b}{INF}+4INFs(INFb))]-\frac{1}{2})+b+4INFs(INFb)\),共\(14\)次操做。
這個\(Subtask\)的構造思想以後要反覆用到。io
給定二進制數\(a\),把它翻譯爲十進制數。ast
開始寫\(for\):對後\(31\)位模擬便可(第\(32\)位直接取),共\(95\)次操做。
給定十進制數\(a\),把它翻譯爲二進制數。
核心思想:從高位到低位,把當前數\(-2^t\),若\(\ge 0\)則爲\(1\),不然爲\(0\)。
與\(Subtask3\)蜜汁相像啊。先寫出一個大概:\(s((x-2^t+eps)<<500)>>500\)。
而後來卡常,不難發現每次都左移十分浪費,因此預先左移一次便可。
再者第\(0\)位貌似不須要該操做,直接取當前結果便可,經過卡常共\(190\)次操做。
給定兩個數\(a,b\);求\(a\ xor\ b\)。
先轉爲二進制數操做,最後再轉回十進制,那麼只須要考慮某一位的答案。
考慮支持函數:\(f(x=\{0,1,2\})=[\{0,x=0,2\}\{1,x=1\}]\),而後用\(f(x)\)求答案便可。
不難想到\(f(x)=x-s((x-1.5)<<500)<<1\)。一共\(603\)次操做。
給定\(a\);求\(\frac{a}{10}\)。
考慮求\(s'(x_0)=\frac{1}{10}\),而後當\(x\to x_0\),\(s(x)=s(x_0)+\frac{1}{10}(x-x_0)\)。
手解可得:\(x_0=-ln(\frac{3+\sqrt{5}}{2})\),先各憑本事把\(x_0\)和\(s(x_0)\)的高精小數搞出來再說。
而後就比較簡單了,\(s(\frac{x}{INF}+x_0)=s(x_0)+\frac{x}{10INF}\)。
因此操做爲:\([s(x>>500+x_0)-s(x_0)]<<500\),共\(7\)次操做。
給定\(a_{1,2...,32}\);把\(a\)數組排好序後輸出來。
冒泡排序,每次操做:\(t=a_i+a_{i+1},a_{i+1}=a_i+max(0,a_i-a_{i+1}),a_i=t-a_{i+1}\)。
惟一的問題在於實現\(f(t)=max(0,t)\),應該已經輕車熟路了吧。
一種可行構造:\(f(t)=x-4INF(s(\frac{t}{INF}+2INFs(INFt))-\frac{1}{2})+2INFs(INFt)\)。
共\(2192\)次操做。
給定\(a,b,c\);實現\(a\times b \% c\)。
分兩步,先算\(a\times b=t\),再算\(t\% c\)。
第一步龜速乘,先把\(b\)轉化爲二進制數,設第\(i\)位爲\(b_i\)。
咱們須要一個函數\(f(x,t=\{0,1\})=[\{0,t=0\},\{x,t=1\}]\),作出\(f(x,t)\)事情就簡單了。
注意到\(s(-\infty)\to 0\),因此\(f(x,t)\)大概形式爲\(s(x+INF(t-1))\),但這樣得不到\(x\)的值。
再次利用\(Sub4\)、\(Sub8\)的那種方法便可。
最終設計出來\(f(x,t)=2INF(-t+s(\frac{x}{INF}+INF(t-1))<<1)\)。
而後來實現取模,核心思想相似\(Sub6\),須要函數\(g(x)=[\{1,x\ge 0\},\{0,x<0\}]\)。
因爲\(x\)是整數域\(Z\)下的,因此這個就比較簡單了,\(g(x)=s(INF(x+0.5))\)。一共\(1493\)步。