UVA 1595 Symmetry 模拟
来源:互联网 发布:vmware共享mac文件夹 编辑:程序博客网 时间:2024/06/08 08:55
看到这个题这么水,写完马上交,结果WA了7发=_=
还是要仔细地考虑一个问题呀
注意对称轴上有多个点的情况,除此之外,从对称轴往两边比就好了
用了两次sort,第一次给整个点排序,第二次给右半边的点排序,保证右半边的横坐标相同的点是按照纵坐标降序排列的
#include <iostream>#include <algorithm>using namespace std;using pa=pair<int,int>;int t,n;pair<int,int> arr[1010];bool judge();int main(){ ios_base::sync_with_stdio(false); cin>>t; while(t--){ cin>>n; for(int i=1;i<=n;++i) cin>>arr[i].first>>arr[i].second; sort(arr+1,arr+n+1); sort(arr+(n>>1)+1+(n&1),arr+n+1,[](const pa& a,const pa& b){return a.first<b.first||a.first==b.first&&a.second>b.second;}); cout<<(judge()?"YES\n":"NO\n"); } return 0;}bool judge(){ int le,ri,k; if(n&1) le=n>>1,ri=le+2,k=arr[(n>>1)+1].first<<1; else le=n>>1,ri=le+1,k=arr[le].first+arr[ri].first; while((arr[le].first<<1)==k&&le>=1)--le; while((arr[ri].first<<1)==k&&ri<=n)++ri; if(le-1!=n-ri)//左右点数不一样绝不可能对称 return false; for(;le>=1;--le,++ri) if(!(arr[le].first+arr[ri].first==k&&arr[le].second==arr[ri].second)) return false; return true;}
0 0
- UVA 1595 Symmetry 模拟
- UVa 1595 Symmetry
- UVA - 1595 Symmetry
- UVa 1595 - Symmetry
- UVa 1595 Symmetry(暴力)
- UVa: 1595 - Symmetry
- Uva 1595 Symmetry
- UVa: 1595 - Symmetry
- UVA - 1595 Symmetry
- UVa 1595 Symmetry
- UVA - 1595 Symmetry set
- Uva - 1595 - Symmetry
- Symmetry(UVa 1595)
- UVA 1595 Symmetry
- UVa 1595 - Symmetry
- UVa 1595 Symmetry
- UVa 1595(Symmetry)
- uva 1595 Symmetry
- JAVA中的CAS原理
- KiCad设计PCB-34-USB、RS232通信、红外发射和接收、FLASH、RS485、仿真器电路PCB设计
- js实现多tab栏切换效果(二)
- 铺地毯-洛谷 1003
- .NET 使用GridView控件绑定数据源其他操作(查询相关数据,而不是显示全数据)
- UVA 1595 Symmetry 模拟
- C/C++中基本数据类型在不同系统中所占空间大小
- iOS Core Animation 性能调优 学习笔记
- 1047. 编程团体赛(20)
- 翻转单词顺序列
- pacman个人常用命令
- (1374): 这是一棵树吗?
- 2016展望未来,勿忘初心——工作录
- KiCad设计PCB-35-RTC电池座、单片机去耦电容、SD卡座、照相机接口的布线