這道題讓我費了我好幾天的時間,差不多打掉了我對演算法的全部信心。不過,幸好,經過幾天的努力我終於ac了這道題,解開了我的乙個大心結。
下面我將列出三份**,其中後兩份是wa**用來給同樣wa的同伴提供點思路,看看是否犯了同樣的錯誤。
首先給出的是ac**,思路如下
將題目抽象知,給出乙個m行n列的資料庫,要求給出是否存在兩行有兩列相同。
由於字串的操作過於繁瑣容易超限,所以先進行編號。
編完號後我們手中的表就剩下一串數字,接下來就是對這一串資料的操作。要求是兩行的兩列相同,所以我們可以列舉所有列的組合並從上往下掃瞄各行。
ac** time 1.7s
#include#include#include#include#include#includeusing namespace std;
int row,col,ans,ok;
const int maxn=100;
char table[maxn];
int code[10010][15];
int a,b,c,d;
typedef pairp;
mapid;
void convert(int r)
c++; s="";
}else s+=p;
}}void judge()
else m[p]=r;}}
}}int main()
judge();
if(ok)
else printf("yes\n");
}return 0;
}
錯誤演算法:
沒有編號,從上到下掃瞄行,如果有兩列相同的則ok=1,退出
**如下
#include#include#include#include#includeusing namespace std;
const int maxn=100;
char table[maxn];
int row,col;
int ok;
int r1,r2,c[2];
void judge(int r,map*m)
else
s="";
}else
}if(ans==2) ok=1;
}int main()
c++; s="";
}else s+=p;
}}void judge()
else m[p]=r;}}
}}int main()
m.clear();
judge();
if(ok)
else printf("yes\n");
}return 0;
}
錯誤原因:不能確定是不是兩列
錯誤資料:
2 31,2,3
1,3,5
正確答案:yes
UVa 755 487 3279解題報告
第一道超時題目,資料量太大達到100000,如果要乙個乙個手動模擬比較,肯定會超時。看了別人的 都是用到了stl的map容器。果然是神器,如果不用map還真不知道怎麼在3秒內輸出結果。用了map是1秒多。很清晰,就沒寫注釋。include include include include includ...
uva839解題報告
題目大意就是根據幹槓平衡原理,判斷題目所給出的資料組成的天平能否平衡。注意,此天平可能包含子天平。輸入時,如果w為0,則表示包含子天平,子天平按照先左後右的方法輸入。解題思路 這是二叉樹的問題,資料的輸入就好比先序遍歷。判斷有無子節點就是判斷w是否為0 本題需要思考兩點 第乙個如何判斷子天平平和 第...
UVA540解題報告
挺簡單的一道模擬題,用來做stl或資料結構的練習題還是不錯的。注意的是這次用到了不止乙個佇列而是1000個,還有就是同乙個隊的要編號。附上ac time 30ms include include includeusing namespace std const int maxn 1000 10 ch...