uva 1595 Symmetry 暴力

还是暴力

只需要判断是否关于竖直线堆成

写两个数组

一个按照先x升序后y降序排

一个按照先x降序后y降序排

然后从0扫到(n/2+1)就好

判x之和是否相等和y坐标是否相等即可

弱校连萌题目链接:http://acm.bnu.edu.cn/v3/contest_show.php?cid=5772#problem/N

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <set>
#include <queue>
#include <stack>
#include <map>
#include <vector>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> P;

const int maxn = 1100;

struct P1
{
    int x, y;
    bool operator < (const P1& a) const
    {
        return x < a.x || (x == a.x && y > a.y);
    }
}p1[maxn];

struct P2
{
    int x, y;
    bool operator < (const P2& a) const
    {
        return x > a.x || (x == a.x && y > a.y);
    }
}p2[maxn];

int main()
{
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);

    int T;
    scanf("%d", &T);
    while(T--)
    {
        int n;
        scanf("%d", &n);

        for(int i = 0; i < n; i++)
        {
            scanf("%d%d", &p1[i].x, &p1[i].y);
            p2[i].x = p1[i].x;
            p2[i].y = p1[i].y;
        }

        sort(p1, p1 + n);
        sort(p2, p2 + n);

        bool flag = true;
        int sum = p1[0].x + p2[0].x;

        for(int i = 0; i < n/2+1; i++)
        {
            if(p1[i].x + p2[i].x != sum || p1[i].y != p2[i].y)
            {
                flag = false;
                break;
            }
        }

        if(flag)
            printf("YES\n");
        else
            printf("NO\n");

    }

    return 0;
}

这题是受数据结构里栈和队列课后作业的启发

然后顺便复习了一下结构体运算符重载

时间: 2024-12-04 14:02:48

uva 1595 Symmetry 暴力的相关文章

uva 1595 - Symmetry

思路:首先,如果这些点对称,那么它们的对称轴是x = m(m是所有点横坐标的平均值):   把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这个点是否在集合里面.   如果有一个不在的话,说明不能构成对称图形. 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <set> 5 using namespace std; 6 7 str

uva 617- Nonstop Travel(暴力+数学)

题目链接:uva 617 - Nonstop Travel 题目大意:在一条路上有n个红绿灯,给出红绿灯的位置,以及绿灯,黄灯和红灯的时间,问现在以什么样的速度可以不同停止便通过这条路段.(速度只在30~60km/h) 解题思路:枚举速度,然后判断即可. 注意说黄灯也是可以过的,以及红绿灯的距离是以米为单位的. #include <cstdio> #include <cstring> const int N = 10; struct state { double dis; int

uva 1509 - Leet(暴力)

题目链接:uva 1509 - Leet 题目大意:给出k,表示一个字符可以对应k给字符编码,给出字符串1,问时候有符合的编码可以生成字符串2. 解题思路:暴力枚举,对于每个碰到的字符记录对应的编码. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 105; const int maxc = 200; int k, len1,

UVa 1595 (水题) Symmetry

颓废的一个下午,一直在切水题,(ˉ▽ ̄-) 首先如果这些点是对称的话,那么它们的对称轴就是x = m,m是横坐标的平均值. 把这些点放到一个集合里,然后扫描每个点,计算出它关于x = m的对称点,看这个点是否在集合里面. 如果有一个不在的话,说明不能构成对称图形. 1 #include <cstdio> 2 #include <algorithm> 3 #include <set> 4 using namespace std; 5 6 struct Point 7 {

Uva 3226 Symmetry

题目给出一些点的坐标(横坐标,纵坐标),没有重叠的点,求是否存在一条竖线(平行于y轴的线),使线两边的点左右对称. 我的思路:对于相同的纵坐标的点,即y值相同的点,可以将x的总和计算出,然后除以点的数目,即可得到对称轴的x坐标.所以,对于不同的y值,可以算出这个y值对应的点的对称轴的x坐标,只要观察这些x坐标的值是否相等即可.如果相同,则存在一条竖线满足题意.如果出现不相同,则不存在符合题意的竖线. 注意点:计算后的x的值可能为小数,故需要用double保存. /* UvaOJ 1595 Eme

uva 201 Squares 暴力

暴力 把边的信息装到一个field数组里面 第一维存水平线 第二维存竖直线 多重循环 先从边长为1正方形开始检查 每次检查都重新扫一下它的外圈 注意竖直线的地方它先给列坐标再给行坐标 输出有些繁琐 注意输出空行还有星星 #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #include <cmath

UVA 1262 Password 暴力枚举

Password Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Original ID: 1262 64-bit integer IO format: %lld      Java class name: Main Prev Submit Status Statistics Discuss Next [PDF Link] Shoulder-surfing is the behavior

UVA - 10120 Gift?! 暴力+规律

题目大意:有n块石头,礼物在第m块石头上,相邻石头的距离为1,规定小青蛙第一步跳到第一块石头上,接下来的跳跃要符合该规则,假设这是第n次跳跃,那么小青蛙跳跃的距离为(2 * n - 1),且每次跳跃都必须跳到石头上 解题思路:石头数量如果超过49的话,小青蛙就可以跳到任意一块石头上,其他的情况只需暴力dfs就可以解决了 #include<cstdio> #include<cstring> int pos, len; bool dfs(int cur, int time) { if(

uva 1508 Equipment(暴力+枚举子集)

uva 1508 Equipment 题目大意:给出n个5元组,要求从中选取k个,要求5个位置上的数的最大值的和尽量大. 解题思路:一开始没思路,看别人题解过的.5位可以组成32种情况,在DFS前预处理,找出32种情况在n组数据中的最大值,然后将这组数据带入DFS中枚举计算. #include<stdio.h> #include<string.h> #include<algorithm> #include<stdlib.h> using namespace