[刷题]算法竞赛入门经典(第2版) 5-6/UVa1595 - Symmetry

题意:平面上给若干点,问它们是不是关于某垂直于x轴的直线对称。


代码:(Wrong Answer, –ms)

//UVa1595 - Symmetry
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct point {
    int x, y;
    bool operator <(point& that)const {
        if (y == that.y) return x < that.x;
        return y < that.y;
    }
};
int T, N;

int main() {
    //freopen("in.txt", "r", stdin);
    scanf("%d", &T);
    while (T--) {
        scanf("%d", &N);
        vector<point> all(N);
        int sym(0);//2倍的对称轴
        for (auto &r : all) {
            scanf("%d%d", &r.x, &r.y);
            sym += r.x;
        }
        sym = sym * 2 / N;
        sort(all.rbegin(), all.rend());
        //printf("sym:%d\n", sym);for (int i = 0;i < N;++i) printf("%d&%d  ", all[i].y, all[i].x);printf("\n");//------------
        int i = 0;
        while (i < N) {
            int k, ij, j = i;
            while (++j != N && all[j].y == all[i].y);
            ij = (--j - i) / 2;
            //printf("i:%d\t", i);printf("j:%d\t", j);printf("ij:%d\n", ij);//----------
            for (k = 0;k <= ij;++k) {
                if (all[i + k].x + all[j - k].x != sym) break;
            }
            if (k <= ij) break;
            i = j + 1;
        }
        printf((i < N ? "NO\n" : "YES\n"));
    }
    return 0;
}

分析:好气呀,这么简单的题目,做了一下午+一上午,无限WA,至今找不到错误。不玩了,学会放弃,以后有心情再看。
我的想法是:定义一个结构体存每个点的x、y,读取每个数据后排序,优先y从小到大,其次x从小到大(目的是方便找出每个点对应的点。例如相同的y里面,最小的x与最大的x对应)。随便找出一个可能的对称轴(可以是找最大、最小的x,相加除以二;也可以所有的x相加再除以N。我选的后者)。然后取每对对应的两个点看相加的结果是不是对称轴两倍。
然而自己的测试数据都对,到了提交就总是WA。换成网上都用的set的方法重新做一遍,还是WA,开始怀疑人生。以下是我的测试数据,我实在是找不到其他的特殊情况了。

12

5 
-2 5 
0 0 
6 5 
4 0 
2 3 

4 
2 3 
0 4 
4 0 
0 0 

4 
5 14 
6 10
5 10 
6 14

10
7 -666
0 5
-1 -666
7 5
3 4
0 -666
4 4
4 -666
3 -666
8 -666

1
233 322

2
-10000 999
9999 998

2
-999 999
0 999

3
1 1
2 1
4 1

3
1 1
2 1
3 1

3
1 1
2 2
3 1

4
0 1
2 1
3 1
5 1

37
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
1 9
2 8
3 7
4 6
6 4
7 3
8 2
9 1
5 6
5 7
5 55
5 4
5 3
5 -45
6 5
7 5
8 5
10 5
55 5
4 5
3 5
2 5
0 5
-45 5
8 100
7 100
3 100
2 100
posted @ 2016-08-23 14:35  蟹脑板  阅读(334)  评论(0编辑  收藏  举报