洛谷 題解 P1557 Kruscal的加法

2022-07-07 20:42:08 字數 1741 閱讀 8060

該部落格已經廢棄,請至新部落格nflscode.github.io

題目鏈結

首先,資料範圍是長度不超過2000,所以要開高精度

根據題意,有加法,減法和乘法。所以先把高精度寫完(我使用的是vector)。

加法高精度

vectorplus(const vector& a,const vector& b)

else if(cmpans==-1) //ac(max(a.size(),b.size()));

for (int i=0;i乘法高精度

vectormul(const vector&a,const vector&b)

{ vectorc(a.size()+b.size());

for (int i=0;i接下是字串處理。

方法:將整個字串拆成表示式,每個表示式單獨計算,最後加到ans裡。

有以下幾種情況:

計算有多少個加號,再讀入數字,把他們乘起來。

charge(to,bit-i/*加號個數*/); //把to填充為加號個數

while (isdigit(s[i]))num.push_back(s[i]-'0'),++i;

reverse(num.begin(),num.end()); //因為讀入是反著的,要把高低位反過來

num=mul(num,to); //乘起來

--i; //因為更新時會跳過乙個字元,所以要後退乙個

分別讀入括號裡的數和後面的數,再乘起來。

++i; //跳過加號

while (s[i]!=')')to.push_back(s[i]-'0'),++i;

reverse(to.begin(),to.end());

++i; //跳過右括號

while (isdigit(s[i]))num.push_back(s[i]-'0'),++i;

reverse(num.begin(),num.end());

num=mul(num,to);

--i;

同多個加號(為什麼乙個加號要單獨處理)

while (isdigit(s[i]))num.push_back(s[i]-'0'),++i;

reverse(num.begin(),num.end());

--i;

只有第乙個表示式才會出現。(very easy)

while (isdigit(s[i]))num.push_back(s[i]-'0'),++i;

reverse(num.begin(),num.end());

--i;

餘下三種:

\(---x\)

\(-(x)x\)

\(-x\)

同加法(太長不貼了)

終極問題:

a:字串處理+分類討論。

(r函式表示引數為(num,ans))

ans符號

num符號

處理方法++

plus+-

minus(高精度已做正負處理)-+

rminus,ans取相反數--

plus

ans.push_back(0); //答案初始化為0

vectornum,to; //num是要加(減)的數,to是有多少個num相加(減)

for (int i=0;i

洛谷 P1101 題解

這道題可以用深搜 回溯 來寫,相信大部分人都是這麼想的,但是有些人可能在一些地方饒了半天,所以這裡就貼一下我的思路,個人覺得自己的很好懂,除了tx和ty那裡,但是tx和ty的那種用法對於輸出路徑的題目一般很實用 這個算是比較簡單的吧,題目裡給出了具體要找的字串,我們要做的就是對它進行8個方向的搜尋,...

洛谷 P1169 題解

請你在乙個黑白矩陣中選出乙個長方形 含正方形 和正方形的子矩陣,使得所有相鄰的點顏色不一樣。矩陣大小 兩條邊都 2000 2000 2 000輸入 3 31 0 1 0 1 0 1 0 0輸出4 6解釋給定矩陣 正方形 長方形 我的控制台是萌萌噠 ffc0cb粉色 乙個小技巧 如果您的控制台是像我的...

題解 洛谷 P3332

題目描述 權值線段樹套線段樹板子題 首先觀察題目,判斷為二維偏序問題 操作1為區間修改,所以一定是外部線段樹維護權值,內部線段樹維護所在區間,否則時間複雜度 qwq 為方便查詢,雜湊時我採用雜湊每個數的相反數的方法將求第k大轉換為求第k小 詢問可以直接想到的做法就是二分答案,查詢1 ans在區間內的...