日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

22行代码AC——习题5-6 对称轴(Symmetry,UVa1595)——解题报告

發(fā)布時間:2024/2/28 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 22行代码AC——习题5-6 对称轴(Symmetry,UVa1595)——解题报告 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

勵志用盡量少的代碼做高效的表達。


題目(提交)鏈接→UVa-1595


思路:

此題本質(zhì)是一道笛卡爾坐標(biāo)系上的對稱性問題。
判定性問題:由于只要能判別圖像是否左右對稱即可,無需確認(rèn)關(guān)于哪條垂直線對稱,那么問題可以這樣解決:將坐標(biāo)升序排序后,若兩側(cè)坐標(biāo)和都等于sum,再判斷二者y值相同。就說明關(guān)于某條線對稱。
最開始想到用pair結(jié)構(gòu)體,p.first存儲x坐標(biāo),p.second存儲y坐標(biāo)。重寫cmp()函數(shù),利用sort()對pair進行升序排序, (x1+x2)/2求出sum,依次比較,若符合條件,則輸出。
但這個想法是有bug的:
錯誤:(x1+x2)/2可能是小數(shù),而sum是int型,造成數(shù)據(jù)不準(zhǔn)確。 解決辦法:減法代替除法(坐標(biāo)運算盡量避免除法),具體見代碼第15行。
待優(yōu)化:用set<pair<int,int>>s; 代替pair<int,int>p+sort()。提高效率。
下面是優(yōu)化后的代碼:

代碼:

#include<bits/stdc++.h> using namespace std; int main() {int n; cin >> n; while(n--) {int m,x,y; cin >> m; set<pair<int,int>>st;int Min = 20000, Max = -20000;for(int i = 0; i < m; i++) {cin >> x >> y; Max = max(x,Max); Min = min(x,Min);st.insert({x,y});}bool flag = false;for(auto p : st) {auto t = make_pair((Max+Min)-p.first,p.second); //auto的意思是自動識別類型,可以是任何類型 if(!st.count(t)) { flag = !flag; break; }}cout << (flag ? "NO\n" : "YES\n");} return 0; }

收獲:

1、set<pair<int,int>>p:升序結(jié)構(gòu)體。
2、關(guān)于坐標(biāo)對稱性的判定問題。
3、坐標(biāo)運算盡量不要使用除法。


擇苦則安,擇做則樂(閑)。虛擬終究比不過真實精彩之萬一。

總結(jié)

以上是生活随笔為你收集整理的22行代码AC——习题5-6 对称轴(Symmetry,UVa1595)——解题报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。