CSES - Datatähti Open 2019 - Results
Submission details
Task:Sum
Sender:tutis
Submission time:2019-01-19 18:58:04 +0200
Language:C++
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttime
#10.03 sdetails
#20.02 sdetails
#30.02 sdetails
#40.01 sdetails
#50.02 sdetails
#60.01 sdetails
#70.02 sdetails
#80.03 sdetails
#90.01 sdetails
#100.02 sdetails
#110.02 sdetails
#120.02 sdetails
#130.02 sdetails
#140.01 sdetails
#150.01 sdetails
#160.01 sdetails
#170.03 sdetails
#180.02 sdetails
#190.01 sdetails
#200.01 sdetails
#210.03 sdetails
#220.02 sdetails
#230.02 sdetails
#240.02 sdetails
#250.02 sdetails
#260.02 sdetails
#270.01 sdetails
#280.02 sdetails

Code

/*input
2
4
0 0
2 1
3 -1
2 -2
4
0 0
2 1
3 -1
2 0
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const ll modulo = (1000000000) + 7;
struct point
{
	ll x, y;
	point()
	{

	}
	point(ll x, ll y): x(x), y(y)
	{

	}
};
point operator-(point a, point b)
{
	return point(a.x - b.x, a.y - b.y);
}
point operator*(point a, point b)
{
	return point(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
}
ll cross(point a, point b)
{
	return (a.x * b.y - a.y * b.x);
}
bool vienodi(point a, point b)
{
	if (cross(a, b) != 0)
		return false;
	if (a.x * b.x < 0 || a.y * b.y < 0)
		return false;
	return true;
}
void rask(point a, point b, point c, point d, point &L, point &R, bool &ok)
{
	if (cross(a, c) <= 0 && cross(c, b) <= 0)
	{
		L = c;
		R = b;
		if (vienodi(L, R))
			ok = false;
		return;
	}
	if (cross(a, d) <= 0 && cross(d, b) <= 0)
	{
		L = a;
		R = d;
		if (vienodi(L, R))
			ok = false;
		return;
	}
	ok = false;
}
int main()
{
	ios_base::sync_with_stdio(false);
	ll T;
	cin >> T;
	while (T--)
	{
		ll n;
		cin >> n;
		point a[n];
		for (ll i = 0; i < n; i++)
			cin >> a[i].x >> a[i].y;
		for (ll i = n - 1; i >= 0; i--)
			a[i] = a[i] - a[0];
		point lo[n];
		point hi[n];
		for (ll i = 1; i < n; i++)
		{
			point X = a[i] - a[i - 1];
			lo[i] = point(X.y, X.x);
			hi[i] = point(-X.y, -X.x);
		}
		point L = lo[1];
		point R = hi[1];
		bool ok = true;
		for (ll j = 2; j < n; j++)
		{
			if (ok)
				rask(L, R, lo[j], hi[j], L, R, ok);
		}
		if (ok)
			cout << "YES\n";
		else
			cout << "NO\n";
	}
}

Test details

Test 1

Verdict:

input
1

correct output
0

user output
(empty)

Test 2

Verdict:

input
2

correct output
0

user output
(empty)

Test 3

Verdict:

input
3

correct output
0

user output
(empty)

Test 4

Verdict:

input
4

correct output
0

user output
(empty)

Test 5

Verdict:

input
5

correct output
0

user output
(empty)

Test 6

Verdict:

input
6

correct output
1

user output
(empty)

Test 7

Verdict:

input
7

correct output
1

user output
(empty)

Test 8

Verdict:

input
8

correct output
2

user output
(empty)

Test 9

Verdict:

input
9

correct output
3

user output
(empty)

Test 10

Verdict:

input
10

correct output
4

user output
(empty)

Test 11

Verdict:

input
20

correct output
24

user output
(empty)

Test 12

Verdict:

input
30

correct output
61

user output
(empty)

Test 13

Verdict:

input
40

correct output
114

user output
(empty)

Test 14

Verdict:

input
50

correct output
184

user output
(empty)

Test 15

Verdict:

input
60

correct output
271

user output
(empty)

Test 16

Verdict:

input
70

correct output
374

user output
(empty)

Test 17

Verdict:

input
80

correct output
494

user output
(empty)

Test 18

Verdict:

input
90

correct output
631

user output
(empty)

Test 19

Verdict:

input
100

correct output
784

user output
(empty)

Test 20

Verdict:

input
200

correct output
3234

user output
(empty)

Test 21

Verdict:

input
300

correct output
7351

user output
(empty)

Test 22

Verdict:

input
400

correct output
13134

user output
(empty)

Test 23

Verdict:

input
500

correct output
20584

user output
(empty)

Test 24

Verdict:

input
600

correct output
29701

user output
(empty)

Test 25

Verdict:

input
700

correct output
40484

user output
(empty)

Test 26

Verdict:

input
800

correct output
52934

user output
(empty)

Test 27

Verdict:

input
900

correct output
67051

user output
(empty)

Test 28

Verdict:

input
1000

correct output
82834

user output
(empty)