2014廣州市選day1 倒數運算

2021-10-09 09:40:00 字數 2556 閱讀 7787

倒數,顧名思義就是用1除以被倒數得出的結果,例如2的倒數是0.5,0.5的倒數是2。現在我們需要獲得正有理數的倒數。

正有理數的表示格式:

《整數部分》 + [小數點]+ [小數非迴圈部分] [(迴圈部分)]

其中 <> 為必填部分, 為可選部分, 如果選了小數點,則後面肯定有小數部分。

正有理數的表示要求:

整數部分十位數字以後不能有多餘的0,如 00123 是非法的有理數

小數後面不能有多餘的0,如 0.123000 , 0.12(0) 是非法的有理數

可以放進迴圈部分的小數一定要放進迴圈部分,不能留在非迴圈部分,如 0.123(3) ,12.123234(234) 是非法的

小數迴圈部分不能是 (9),如果是(9)則需要進一處理,如 0.(9)=1 , 0.2(9)=0.3

輸入只有一行,代表乙個正有理數,符合上述的有理數表示要求,每一行最多100個字元。

輸出一行,代表輸入的正有理數的倒數,要求符合上述有理數的表示要求。

輸入資料保證輸出的正確答案不超過100個字元。

sample input1

3sample input2

0.(3)

sample output1

0.(3)

sample output2

3先把正有理數轉化成分數,這裡就解決迴圈小數,其他的很好處理。

設分母為y

yy,分子為xxx。

先處理分母:分母分為兩個部分:1.前一部分是9,有迴圈節的長度q

qq個9;2.後一部分是0,有非迴圈節的長度p

pp個0。

然後是分子:設非迴圈節的數為g

gg,迴圈節的數為l

ll,則x=g

∗(10

q−1)

+l

x=g*(10^q-1)+l

x=g∗(1

0q−1

)+l,即非迴圈節的數∗

*∗迴圈節的長度個9+迴圈節。

如果整數部分大於0,分子分子就加上整數部分∗

*∗分母。

最後就是高精度除法:分母/

//分子。

非常非常不建議看**……

#include

#include

#include

using

namespace std;

struct gjd

;gjd a,b,c,t,k,u,o,fz,fm,now,ans,ha[

521]

;int tt,jh,xhj,an,set[

521]

;char s[

105]

;void

dd(gjd &x)

void

cf(gjd x,gjd y,gjd &z)

} z.l=x.l+y.l;

while

((z.num[z.l]==0

)&&(z.l>1)

)z.l--;}

void

inc(gjd x,gjd y,gjd &z)

if(z.num[z.l+1]

)z.l++;}

void

dec(gjd x,gjd y,gjd &z)

z.l=x.l;

while

((z.num[z.l]==0

)&&(z.l>1)

)z.l--;}

intcmp

(gjd x,gjd y)

return0;

}voidef(

)}inthash

(gjd x)

else

return set[h];}

void

div()}

if(pd)xhj=pd;

else xhj=0;

}int

main()

}if(c.l)

else

if(b.l)

else fm.l=

1,fm.num[1]

=1,fz=a;

div();

for(i=

1;i(ans.num[i]!=0

)break

;for

(i;i<=fm.l;i++

)printf

("%d"

,ans.num[i]);

if(ans.l>fm.l)

for(i;i)printf

("%d"

,ans.num[i]);

printf

("(");

for(i;i<=ans.l;i++

)printf

("%d"

,ans.num[i]);

printf

(")");

}else

for(i;i<=ans.l;i++

)printf

("%d"

,ans.num[i]);

}fclose

(stdin);

fclose

(stdout);

return0;

}

廣州市選2014 Tree

下圖展示了一種二叉樹 這種二叉樹的每個葉子節點上都標註了權值,而且具有以下有趣的特性 每個非葉子節點,其左右子樹葉子節點的權值之和相等。我們稱這種二叉樹叫平衡二叉樹。我們將一棵平衡二叉樹葉子節點的權值從左到右列出來,假如這個權值序列是另乙個序列a的子串行,我們稱這棵平衡二叉樹 隱藏 在序列a當中。在...

2014廣州市選day1 字串距離題解

給出兩個由小寫字母組成的字串 x 和y 我們需要算出兩個字串的距離,定義如下 1 我們可以在字串的頭 尾 中間插入若干空格,組成乙個新的擴充套件串 2 對x擴充套件成擴充套件串x1,對y擴充套件成擴充套件串y1,並且令x1和y1具有相同的長度 3 定義x1 y1的距離為每個對應的字元的距離之和,其中...

省選 NOI刷題Day1

bzoj4864 splay亂搞 bzoj3669 正解lct,考慮上下界的spfa可過 bzoj3668 位運算 暴力 bzoj3670 kmp dp bzoj3671 含有最小的乙個數的路徑一定比不含的優 貪心 bzoj1564 按數值排序,就得到了那個treap的中序遍歷,用dp l,r,k ...