| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
请问大神,我这样写为什么总是WA,,用大神给的数据都测过了,没有发现问题,,求助,,感觉自己好水啊,这么简单都WA了那么多次。。//
// main.cpp
// ACMUsing
//
// Created by SupingLi on 16/12/28.
// Copyright 2016年 SupingLi. All rights reserved.
//
#include <cstdio>
#include <algorithm>
using namespace std;
int t,n,k;
struct w{
int l,r;
int inUse;
}wall[100];
//1230
//先对输入排序,按照x从小到大排,x相同则按、、、、、y从大到小排
//遍历点,从左到右边,超过最大数,则找到最大右边的墙,使他失效
//数据都试过了,没有问题,可是就是WA,心好累。。
int compare(w a, w b) {
int x = a.l <= b.l;
int y = a.r >= b.r;
if (a.l == b.l)
return y;
else
return x;
}
int work() {
int i, j, columnCount = 0, ans = 0;
struct w pre = wall[0],maxRWall;
int maxR=0;
if (k == 0)
return n;
sort(wall,wall+n,compare);
for (i = 0; i < n; i ++) {
if (wall[i].inUse == 0) {
continue;
}
pre = wall[i];
maxR=-1;
maxRWall=pre;
columnCount = 0;
for (j = 0; j < n; j ++) {
if (wall[j].inUse == 0) {
continue;
}
if (wall[j].l <= pre.r && wall[j].r >= pre.l) {
if (columnCount < k) {
columnCount++;
if (wall[i].r >= wall[j].r)
pre = wall[j];
} else{
maxR=i;
if (maxRWall.r < wall[j].r) {
maxRWall = wall[j];
maxR = j;
}
}
}
}
//找到有超过最大墙数的情况
if(maxR != -1) {
wall[maxR].inUse = 0;
ans ++;
}
}
return ans;
}
int main()
{
int i;
int a,b,temp;
scanf("%d",&t);
while (t--) {
scanf("%d%d",&n,&k);
for (i = 0; i < n; i ++) {
scanf("%d%d%d%d",&wall[i].l,&a,&wall[i].r,&b);
if (wall[i].l > wall[i].r) {
temp = wall[i].l;
wall[i].l = wall[i].r;
wall[i].r = temp;
}
wall[i].inUse = 1;
}
printf("%d\n",work());
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator