习题3-11 Kickdown UVA - 1588
生活随笔
收集整理的這篇文章主要介紹了
习题3-11 Kickdown UVA - 1588
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
不知道是我把題意理解錯了還是題目出錯了,我覺得,在題目的要求之下,如果能夠反轉(zhuǎn)其中一塊板,那么會得到更短的長度。但是測試數(shù)據(jù)表明不需要反轉(zhuǎn)板。
剛開始寫怎么寫都寫不對,因?yàn)閷ο嘟徊糠值目紤]不夠細(xì)致,處理的比較粗糙,后來看了網(wǎng)上大佬的代碼,才明白應(yīng)該怎么做才簡單。只需要比較三個數(shù)據(jù):字符串1的長度、字符串2的長度、當(dāng)前模擬的移動字符串的長度減去當(dāng)前字符串已遍歷過的字符的數(shù)量。取它們中的最小值,作為循環(huán)的邊界,這樣就不會出界了。
下面是代碼。實(shí)現(xiàn)思路是,固定a字符串,移動b字符串;然后固定b字符串,移動a字符串。具體題解詳見某大佬blog:https://www.cnblogs.com/luruiyuan/p/5562520.html
#include <bits/stdc++.h> using namespace std; int minlen(string a,string b); int main() {string a,b;while (cin>>a&&!a.empty()) {cin>>b;cout<<min(minlen(a,b),minlen(b,a))<<endl;}return 0; }int minlen(string a,string b) {int alen=(int)a.size(),blen=(int)b.size();int res=alen+blen,smallen=min(alen,blen);for (int i=0;i<alen;i++) {int j,rg=min(smallen,alen-i);for (j=0;j<rg;j++)if (a[i+j]=='2'&&b[j]=='2') break;if (j==rg) res=min(res,alen+blen-rg);}return res; }轉(zhuǎn)載于:https://www.cnblogs.com/yichuan-sun/p/9677716.html
總結(jié)
以上是生活随笔為你收集整理的习题3-11 Kickdown UVA - 1588的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL表完整性约束
- 下一篇: 【网易严选】iOS持续集成打包(Jenk