Submission #736151

# Submission time Handle Problem Language Result Execution time Memory
736151 2023-05-05T09:07:57 Z marvinthang Zvijezda (COCI19_zvijezda) C++17
110 / 110
123 ms 8008 KB
/*************************************
*    author: marvinthang             *
*    created: 05.08.2022 15:46:01    *
*************************************/

#include <bits/stdc++.h>

using namespace std;

#define                  fi  first
#define                  se  second
#define                 div  ___div
#define                left  ___left
#define               right  ___right
#define                TIME  (1.0 * clock() / CLOCKS_PER_SEC)
#define             MASK(i)  (1LL << (i))
#define             FULL(i)  (MASK(i) - 1)
#define           BIT(x, i)  ((x) >> (i) & 1)
#define  __builtin_popcount  __builtin_popcountll
#define        scan_op(...)  istream & operator >> (istream &in, __VA_ARGS__ &u)
#define       print_op(...)  ostream & operator << (ostream &out, const __VA_ARGS__ &u)
#define          file(name)  if (fopen (name".inp", "r")) { freopen (name".inp", "r", stdin); freopen (name".out", "w", stdout); }

template <class T>             scan_op(vector <T>)  { for (size_t i = 0; i < u.size(); ++i) in >> u[i]; return in; }
template <class T>            print_op(vector <T>)  { out << '{'; for (size_t i = 0; i + 1 < u.size(); ++i) out << u[i] << ", "; if (!u.empty()) out << u.back(); return out << '}'; }
template <class U, class V>   scan_op(pair <U, V>)  { return in >> u.fi >> u.se; }
template <class U, class V>  print_op(pair <U, V>)  { return out << '(' << u.fi << ", " << u.se << ')'; }

const double PI = 3.1415926535897932384626433832795; // acos(-1.0); atan(-1.0);
const int dir[] = {1, 0, -1, 0, 1, 1, -1, -1, 1}; // {2, 1, -2, -1, -2, 1, 2, -1, 2};
const int MAX = 1e5 + 5;

struct Point {
	long long x, y;
	Point(long long x = 0, long long y = 0): x(x), y(y) {}
	friend scan_op(Point) { return in >> u.x >> u.y; }
};

bool ccw(Point a, Point b, Point c) {
	return (long double) a.x * (b.y - c.y) +
		   (long double) b.x * (c.y - a.y) + 
		   (long double) c.x * (a.y - b.y) >= -1e-9;
}

int N, T, Q;
Point poly[MAX];

void init(void) {
	cin >> T >> N;
	for (int i = 0; i < N; ++i) cin >> poly[i];
}

inline int nxt(int i) { return (i + 1) % N; }

int countOne(bool parity, int left, int right, Point p) {
	int l = left, r = right;
	while (l <= r) {
		int m = l + r >> 1;
		if (ccw(poly[m], poly[nxt(m)], p) == parity) l = m + 1;
		else r = m - 1;
	}
	return parity ? r - left + 1 : right - r;
}

void process(void) {
	int cnt = 0;
	cin >> Q;
	while (Q--) {
		Point p; cin >> p;
		p.x ^= 1LL * T * cnt * cnt * cnt;
		p.y ^= 1LL * T * cnt * cnt * cnt;
		bool res = false;
		bool a = ccw(poly[0], poly[nxt(0)], p);
		bool b = ccw(poly[N / 2], poly[nxt(N / 2)], p);
		if (a == b) res = a;
		else res = countOne(a, 0, N / 2 - 1, p) + countOne(b, N / 2, N - 1, p) > N / 2;
		cout << (res ? "DA" : "NE") << '\n';
		cnt += res;
	}
}

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(nullptr); // cout.tie(nullptr);
	file("coci1920_r2_zvijezda");
	init();
	process();
	// cerr << "Time elapsed: " << TIME << " s.\n";
	return (0^0);
}

Compilation message

zvijezda.cpp: In function 'int countOne(bool, int, int, Point)':
zvijezda.cpp:58:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   58 |   int m = l + r >> 1;
      |           ~~^~~
zvijezda.cpp: In function 'int main()':
zvijezda.cpp:22:69: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 | #define          file(name)  if (fopen (name".inp", "r")) { freopen (name".inp", "r", stdin); freopen (name".out", "w", stdout); }
      |                                                             ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
zvijezda.cpp:84:2: note: in expansion of macro 'file'
   84 |  file("coci1920_r2_zvijezda");
      |  ^~~~
zvijezda.cpp:22:103: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 | #define          file(name)  if (fopen (name".inp", "r")) { freopen (name".inp", "r", stdin); freopen (name".out", "w", stdout); }
      |                                                                                               ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
zvijezda.cpp:84:2: note: in expansion of macro 'file'
   84 |  file("coci1920_r2_zvijezda");
      |  ^~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1876 KB Output is correct
2 Correct 2 ms 1876 KB Output is correct
3 Correct 2 ms 1904 KB Output is correct
4 Correct 2 ms 1876 KB Output is correct
5 Correct 3 ms 1876 KB Output is correct
6 Correct 3 ms 1956 KB Output is correct
7 Correct 3 ms 2004 KB Output is correct
8 Correct 3 ms 2004 KB Output is correct
9 Correct 3 ms 2004 KB Output is correct
10 Correct 3 ms 1904 KB Output is correct
11 Correct 4 ms 1904 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1876 KB Output is correct
2 Correct 2 ms 1876 KB Output is correct
3 Correct 2 ms 1904 KB Output is correct
4 Correct 2 ms 1876 KB Output is correct
5 Correct 3 ms 1876 KB Output is correct
6 Correct 3 ms 1956 KB Output is correct
7 Correct 3 ms 2004 KB Output is correct
8 Correct 3 ms 2004 KB Output is correct
9 Correct 3 ms 2004 KB Output is correct
10 Correct 3 ms 1904 KB Output is correct
11 Correct 4 ms 1904 KB Output is correct
12 Correct 60 ms 5932 KB Output is correct
13 Correct 69 ms 5964 KB Output is correct
14 Correct 87 ms 6124 KB Output is correct
15 Correct 93 ms 6352 KB Output is correct
16 Correct 123 ms 7748 KB Output is correct
17 Correct 111 ms 7624 KB Output is correct
18 Correct 72 ms 5976 KB Output is correct
19 Correct 91 ms 6476 KB Output is correct
20 Correct 108 ms 7024 KB Output is correct
21 Correct 109 ms 7624 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 114 ms 8008 KB Output is correct
2 Correct 117 ms 7996 KB Output is correct
3 Correct 95 ms 6524 KB Output is correct
4 Correct 121 ms 7908 KB Output is correct
5 Correct 118 ms 7880 KB Output is correct
6 Correct 116 ms 7740 KB Output is correct
7 Correct 116 ms 7724 KB Output is correct
8 Correct 116 ms 8000 KB Output is correct
9 Correct 113 ms 7552 KB Output is correct