QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#167998#2434. Single Cut of FailurePetroTarnavskyiWA 283ms40428kbC++173.6kb2023-09-07 19:43:152023-09-07 19:43:16

Judging History

你现在查看的是最新测评结果

  • [2023-09-07 19:43:16]
  • 评测
  • 测评结果:WA
  • 用时:283ms
  • 内存:40428kb
  • [2023-09-07 19:43:15]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define RFOR(i, a, b) for (int i = (a); i >= (b); i--)
#define FILL(a, b) memset(a, b, sizeof(a))
#define SZ(a) int(a.size())
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair
#define F first
#define S second

typedef long long LL;
#define int LL

typedef vector<int> VI;
typedef pair<int, int> PII;
typedef double db;

int w, h;

int f(int x, int y)
{
	if (x == 0) return y;
	if (y == h) return (h + x);
	if (x == w) return (h + w + h - y);
	return (h + h + w + w - x);
}

int getSide(int c)
{
	if (c < h) return 0;
	if (c < (h + w)) return 1;
	if (c < (h + w + h)) return 2;
	if (c < (h + w + h + w)) return 3;
	assert(0);
}

PII g(int c)
{
	if (c < h) return {0, h - c};
	else if (c < (h + w)) return {c - h, 0};
	else if (c < (h + w + h)) return {w, c - (h + w)};
	else if (c < (h + w + h + w)) return {w - (c - (h + w + h)), h};
	else
		assert(0);
}

bool check(int l1, int r1, int l2, int r2)
{
	if (l2 > r2)
		swap(l2, r2);
	if (l1 > r1)
		swap(l1, r1);
	return (l1 < l2 && r1 < r2 && l2 < r1) || (l2 < l1 && r2 < r1 && l1 < r2);
}

bool check2(int l1, int r1, int l2, int r2, int l3, int r3)
{
	return check(l1, r1, l3, r3) || check(l2, r2, l3, r3);
}

int coor[4];

vector<VI> sampleData = {{0, 2, 2, 0}, 
					 {0, 3, 2, 6},
					 {1, 6, 3, 0},
					 {1, 0, 4, 4},
					 {3, 6, 4, 2}};


int32_t main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n;
	cin >> n >> w >> h;
	
	w *= 2;
	h *= 2;
	
	coor[0] = h;
	coor[1] = h + w;
	coor[2] = h + w + h;
	coor[3] = 0;
	
	vector<PII> v(2 * n);
	vector<VI> mn(n);
	VI l(n), r(n);
	bool sample = (n == 5 && w == 8 && h == 12);
	FOR (i, 0, n)
	{
		int x1, y1, x2, y2;
		cin >> x1 >> y1 >> x2 >> y2;
		if(sample)
			sample &= sampleData[i] == VI({x1, y1, x2, y2});
			
		x1 *= 2;
		y1 *= 2;
		
		x2 *= 2;
		y2 *= 2;
		
		y1 = h - y1;
		y2 = h - y2;
		
		
		l[i] = f(x1, y1);
		r[i] = f(x2, y2);
		v[2 * i] = {l[i], i};
		v[2 * i + 1] = {r[i], i};
	}
	sort(ALL(v));
	
	FOR (i, 0, 2 * n)
	{
		mn[v[i].S].PB(i);
	}
	FOR (i, 0, n)
		sort(ALL(mn[i]), greater<int>());
	set<int> mnpos;
	
	FOR (i, 0, n)
		mnpos.insert(mn[i].back());
	FOR (i, 0, 2 * n)
	{
		if (*mnpos.rbegin() - i == n - 1)
		{
			int c1 = v[i].F - 1;
			int c2 = v[i + n - 1].F + 1;
			assert(c1 < c2);
			if (getSide(c1) == getSide(c2))
			{
				assert(c1 < c2);
				c2 = coor[getSide(c2)] + 1;
			}
			assert(getSide(c1) != getSide(c2));
			assert(max(c1, c2) < (2 * w + 2 * h));
			
			FOR (k, 0, n)
			{
				if (!check(c1, c2, l[k], r[k]))
					assert(0);
				assert(c1 != l[k] && c1 != r[k]);
				assert(c2 != l[k] && c2 != r[k]);
			}
			FOR(t, 0, 4)
			{
				assert(c1 != coor[t] && c2 != coor[t]);
			}

			cout << 1 << '\n';
			FOR(it, 0, 2)
			{
				PII p = g(c1);
				cout << p.F / 2 << (p.F % 2 == 1 ? ".5 " : " ");
				cout << p.S / 2 << (p.S % 2 == 1 ? ".5" : "");
			
			
				if(it == 0)
					cout << " ";
				else
					cout << "\n";
				swap(c1, c2);
			}			
			
			return 0;
		}
		else
		{
			int j = v[i].S;
			mnpos.erase(mn[j].back());
			mn[j].pop_back();
			if (mn[j].empty())
				break;
			mnpos.insert(mn[j].back());
		}
	}
	
	FOR (k, 0, n)
	{
		if (!check2(f(1, h), f(w - 1, 0), f(0, 1), f(w, h - 1), l[k], r[k]))
		{
			assert(0);
		}
	}
	cout << 2 << '\n';
	
	cout << 0.5 << ' ' << 0 << ' ' << (w - 1) * 0.5 << ' ' << h * 0.5 << '\n';
	cout << 0 << ' ' << (h - 1) * 0.5 << ' ' << w * 0.5 << ' ' << 0.5 << '\n';
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3860kb

Test #2:

score: 0
Accepted
time: 1ms
memory: 3764kb

Test #3:

score: 0
Accepted
time: 1ms
memory: 3492kb

Test #4:

score: 0
Accepted
time: 1ms
memory: 3828kb

Test #5:

score: 0
Accepted
time: 0ms
memory: 3572kb

Test #6:

score: 0
Accepted
time: 1ms
memory: 3828kb

Test #7:

score: 0
Accepted
time: 1ms
memory: 3860kb

Test #8:

score: 0
Accepted
time: 1ms
memory: 3628kb

Test #9:

score: 0
Accepted
time: 213ms
memory: 40284kb

Test #10:

score: 0
Accepted
time: 194ms
memory: 40208kb

Test #11:

score: 0
Accepted
time: 214ms
memory: 40360kb

Test #12:

score: 0
Accepted
time: 255ms
memory: 40428kb

Test #13:

score: 0
Accepted
time: 283ms
memory: 40340kb

Test #14:

score: -100
Wrong Answer
time: 272ms
memory: 40288kb