NYOJ 8 一种排序 快排 去重
2014-02-10 21:20
239 查看
原题链接
思路:用节点表示长方形的编号,长宽和tag(用来去重的标记,默认为1,重复的标记为0)
难点:先按编号快排,再去重.
附ac代码
思路:用节点表示长方形的编号,长宽和tag(用来去重的标记,默认为1,重复的标记为0)
难点:先按编号快排,再去重.
附ac代码
#include <stdio.h> #include <stdlib.h> struct Node{ int num, len, wid, tag; }; bool compare(Node a, Node b){ if(a.len == b.len && a.wid == b.wid) return true; return false; } int cmp(const void *a, const void *b){ if((*(Node *)a).num - (*(Node *)b).num < 0 || (*(Node *)a).num - (*(Node *)b).num == 0 && (*(Node *)a).len - (*(Node *)b).len < 0 || (*(Node *)a).num - (*(Node *)b).num == 0 && (*(Node *)a).len - (*(Node *)b).len == 0 && (*(Node *)a).wid - (*(Node *)b).wid < 0) return -1; return 1; } int main(){ int t, n, temp; scanf("%d", &t); while(t-- && scanf("%d", &n)){ Node *a = (Node *)malloc(sizeof(Node) * n); //接受输入并保证长大于等于宽 for(int i = 0; i != n; ++i){ scanf("%d%d%d", &a[i].num, &a[i].len, &a[i].wid); a[i].tag = 1; if(a[i].len < a[i].wid) temp = a[i].len, a[i].len = a[i].wid, a[i].wid = temp; } //排序 qsort(a, n, sizeof(Node), cmp); //去重 for(int i = 0; i != n; ++i){ if(!a[i].tag) continue; for(int j = i + 1; j != n && a[j].num == a[i].num; ++j) if(compare(a[i], a[j])) a[j].tag = 0; } //输出 for(int i = 0; i != n; ++i) if(a[i].tag) printf("%d %d %d\n", a[i].num, a[i].len, a[i].wid); free(a); } return 0; }
相关文章推荐
- nyoj--8--一种排序(排序,水题)
- nyoj8(一种排序)(结构体的二级排序)
- 【NYOJ】[8]一种排序
- NYOJ 4 一种排序 (sort)
- nyoj--8--一种排序(排序,水题)
- NYOJ 题目8 一种排序
- nyoj-8 一种排序 sort函数自定义cmp/多关键字排序
- NYoj 8 一种排序(sort/qsort实例)
- NYOJ-8-一种排序
- NYOJ 8-一种排序
- nyoj 8 一种排序
- nyoj 8 一种排序
- 一种排序NYOJ 8
- NYOJ-8 一种排序【sort与qsort】
- NYOJ 8-一种排序
- NYOJ 8 一种排序(comparator排序)
- NYOJ8——一种排序
- nyoj 8 一种排序
- nyoj 8 一种排序
- NYOJ:8-一种排序