201403-1(相反数),201403-2(窗口)

//201403-1
#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    int arr[n];

    int flag[1010];
    memset(flag, 0, sizeof(flag));

    int count = 0;
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
        if (flag[abs(arr[i])] == 1)
            count++;
        flag[abs(arr[i])]++;
    }
    printf("%d", count);

    return 0;
}

//201403-1
#include <bits/stdc++.h>

using namespace std;

int main() {
    int n, num, res = 0;
    scanf("%d", &n);

    unordered_set<int> s;
    while (n--) {
        scanf("%d", &num);
        if (s.find(abs(num)) != s.end())
            res++;
        s.insert(abs(num));
    }
    printf("%d\n", res);

    return 0;
}

//201403-2
//在录入点集的时候,通过push_front将后面录入的点集放在前面,这样可以有效地避免当后续查询点集的时候
//这个点位于多个窗口内,但是打印最上面的窗口
#include <bits/stdc++.h>

using namespace std;

struct Node {
    int rowFirst, colFirst, rowSecond, colSecond;
    int laywer;
};

int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    list<Node> obj;
    for (int i = 1; i <= n; i++) {
        Node node;
        scanf("%d%d%d%d", &node.rowFirst, &node.colFirst, &node.rowSecond, &node.colSecond);
        node.laywer = i;
        obj.push_front(node);
    }

    while (m--) {
        int a, b;
        scanf("%d%d", &a, &b);
        auto it = obj.begin();
        for (; it != obj.end(); it++)
            if (a >= it->rowFirst && a <= it->rowSecond && b >= it->colFirst && b <= it->colSecond)
                break;
        if (it == obj.end())
            printf("IGNORED\n");
        else {
            printf("%d\n", it->laywer);
            obj.erase(it);
            obj.push_front(*it);
        }
    }

    return 0;
}

//201403-2
#include <bits/stdc++.h>

using namespace std;

struct Node {
    int x1, y1, x2, y2;
    int id;
};

int main() {

    int n, m;
    scanf("%d%d", &n, &m);
    list<Node> l;
    int cnt = 1;
    while (n--) {
        Node cur;
        scanf("%d%d%d%d", &cur.x1, &cur.y1, &cur.x2, &cur.y2);
        cur.id = cnt++;
        l.emplace_front(cur);
    }

    while (m--) {
        int x, y;
        scanf("%d%d", &x, &y);
        bool flag = false;
        for (auto it = l.begin(); it != l.end(); it++)
            if (x >= it->x1 && x <= it->x2 && y >= it->y1 && y <= it->y2) {
                printf("%d\n", it->id);
                flag = true;
                l.insert(l.begin(), *it);
                l.erase(it);
                break;
            }

        if (!flag)
            printf("IGNORED\n");
    }


    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值