【POJ】1083

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

const int N = 512;
int t, n, m, cnt;
int cori[N], flag[N];

inline void qs(int l, int r){
    for (int i = l; i <= r; ++i){
        for (int j = i + 1; j <= r; ++j){
            if(cori[i] > cori[j]){
                swap(cori[i], cori[j]);
                swap(flag[i], flag[j]);
            }
            if(cori[i] == cori[j]){
                if(flag[i] < flag[j]){
                    swap(cori[i], cori[j]);
                    swap(flag[i], flag[j]);
                }
            }
        }
    }
}

int main(int argc, char const *argv[]){
    scanf("%d", &t);
    for (int i = 0; i < t; ++i){
        scanf("%d", &n);
        memset(cori, 0, sizeof(cori));
        memset(flag, 0, sizeof(flag));
        for (int j = 1; j <= n; ++j){
            scanf("%d%d", &cori[2 * j - 1], &cori[2 * j]);
            if(cori[2 * j - 1] % 2)cori[2 * j - 1]++;
            if(cori[2 * j] % 2)cori[2 * j]++;
            if(cori[2 * j - 1] > cori[2 * j])swap(cori[2 * j - 1], cori[2 * j]);
            flag[2 * j - 1] = 1;
            flag[2 * j]     = -1;
        }
        qs(1, 2 * n);
        cnt = 0;
        m = 0;
        for (int j = 1; j <= 2 * n; ++j){
            if(flag[j] == 1)cnt++;
            if(flag[j] == -1)cnt--;
            if(cnt > m)m = cnt;
        }
        printf("%d\n", m * 10);
    }
    return 0;
}

Review

  • 水题,因为数据规模很小,直接bf就行
  • WA是因为一开始手写快排写错了;后来发现网上的一些std是错的,貌似不能用快排,因为用来标记起点终点的flag数组不能被不稳定的快排排好
  • 想到过线段树,但感觉和bf没区别
posted @ 2021-09-14 22:15  Mojibake  阅读(48)  评论(0编辑  收藏  举报
知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。