题目
拒绝写题目
我有小情绪了,我想闹人!!
#include<cstdio>
#include<cstring>
#include<iostream>
#include<set>
#include<algorithm>
#include<cmath>
#define Maxn 1005
using namespace std;
typedef pair<int,int> poit;
set<poit> dot;
int x[Maxn],y[Maxn];
inline int abs(int x) {
return x < 0 ? x*(-1) : x;
}
int main() {
int T,n,lef=99999,rig=-99999,symmetry; scanf("%d",&T);
while(T--) {
scanf("%d",&n);
for(int i=1; i<=n; i++) {
scanf("%d %d",&x[i],&y[i]);
x[i] *= 2;
lef = min(lef,x[i]);
rig = max(rig,x[i]);
dot.insert(poit(x[i],y[i]));
}
bool flag = true;
symmetry = (lef + rig) / 2;
for(int i=1; i<=n; i++) {
if(x[i] == symmetry) continue;
int dis = abs(x[i] - symmetry);
if(x[i] < symmetry){
if(dot.find(poit(dis * 2 + x[i],y[i])) == dot.end()) {
flag = false; break;
}
}
else {
if(dot.find(poit(x[i] - dis * 2 ,y[i])) == dot.end()) {
flag = false; break;
}
}
}
if(flag) printf("YES\n");
else printf("NO\n");
}
}
本来还以为什么玄学 高深莫测的题目,然后发现洛谷给出的难度评价是普及-
,,,,,,好吧,是我变菜了,菜了很多,
不说了,说正经的
如果对称的话,先不考虑纵坐标,横坐标最左边的点移动和最右边的点对称。
求个对称线,暴力扫描,用set存储,记录,查找,验证
最气人的来了,
样例中的这一组数据
4
5 14
6 10
5 10
6 14
我跑出来是 “NO”,然后我调试一步步走下来就输出“YES”
给也气坏了,今晚不写了,就到这,睡觉~~~