Submission #35725980
Source Code Expand
#line 2 "/home/nok0/documents/programming/library/template/header.hpp"
#include <bits/stdc++.h>
#line 3 "/home/nok0/documents/programming/library/data_structure/range_set.hpp"
template <class T>
struct range_set {
private:
const T TINF = std::numeric_limits<T>::max() / 2;
T sum;
std::set<std::pair<T, T>> st;
public:
range_set() : sum(0) {
st.emplace(-TINF, -TINF);
st.emplace(TINF, TINF);
}
//[l, r) is covered?
bool covered(const T l, const T r) {
assert(l <= r);
if(l == r) return true;
auto itr = prev(st.upper_bound({l, TINF}));
return itr->first <= l and r <= itr->second;
}
//[x, x + 1) is covered?
bool covered(const T x) { return covered(x, x + 1); }
// return section which covers[l, r)
// if not exists, return[-TINF, -TINF)
std::pair<T, T> covered_by(const T l, const T r) {
assert(l <= r);
if(l == r) return {-TINF, -TINF};
auto itr = prev(st.upper_bound({l, TINF}));
if(itr->first <= l and r <= itr->second) return *itr;
return {-TINF, -TINF};
}
// return section which covers[x, x + 1)
// if not exists, return[-TINF, -TINF)
std::pair<T, T> covered_by(const T x) { return covered_by(x, x + 1); }
// insert[l, r), and return increment
T insert(T l, T r) {
assert(l <= r);
if(l == r) return T(0);
auto itr = prev(st.upper_bound({l, TINF}));
if(itr->first <= l and r <= itr->second) return T(0);
T sum_erased = T(0);
if(itr->first <= l and l <= itr->second) {
l = itr->first;
sum_erased += itr->second - itr->first;
itr = st.erase(itr);
} else
itr = next(itr);
while(r > itr->second) {
sum_erased += itr->second - itr->first;
itr = st.erase(itr);
}
if(itr->first <= r) {
sum_erased += itr->second - itr->first;
r = itr->second;
st.erase(itr);
}
st.emplace(l, r);
sum += r - l - sum_erased;
return r - l - sum_erased;
}
// insert[x, x + 1), and return increment
T insert(const T x) { return insert(x, x + 1); }
// erase [l, r), and return decrement
T erase(const T l, const T r) {
assert(l <= r);
if(l == r) return T(0);
auto itr = prev(st.upper_bound({l, TINF}));
if(itr->first <= l and r <= itr->second) {
if(itr->first < l) st.emplace(itr->first, l);
if(r < itr->second) st.emplace(r, itr->second);
st.erase(itr);
sum -= r - l;
return r - l;
}
T ret = T(0);
if(itr->first <= l and l < itr->second) {
ret += itr->second - l;
if(itr->first < l) st.emplace(itr->first, l);
itr = st.erase(itr);
} else
itr = next(itr);
while(itr->second <= r) {
ret += itr->second - itr->first;
itr = st.erase(itr);
}
if(itr->first < r) {
ret += r - itr->first;
st.emplace(r, itr->second);
st.erase(itr);
}
sum -= ret;
return ret;
}
// erase [x, x + 1), and return decrement
T erase(const T x) { return erase(x, x + 1); }
int size() const { return (int)st.size() - 2; }
T mex(const T x = 0) const {
auto itr = prev(st.upper_bound({x, TINF}));
if(itr->first <= x and x < itr->second)
return itr->second;
else
return x;
}
T sum_all() const { return sum; }
std::set<std::pair<T, T>> get() const {
std::set<std::pair<T, T>> res;
for(auto &p : st) {
if(std::abs(p.first) == TINF) continue;
res.emplace(p.first, p.second);
}
return res;
}
void dump() const {
std::cout << "range_set:";
for(auto &p : st) {
if(std::abs(p.first) == TINF) continue;
std::cout << "[" << p.first << "," << p.second << "),";
}
std::cout << '\n';
}
};
#line 3 "/home/nok0/documents/programming/library/template/def_const.hpp"
const int inf = 1000000000;
const long long INF = 1000000000000000000ll;
#line 4 "/home/nok0/documents/programming/library/template/debug.hpp"
namespace viewer {
void view(const long long &e) {
if(e == INF)
std::cerr << "INF";
else if(e == -INF)
std::cerr << "-INF";
else
std::cerr << e;
}
void view(const int &e) {
if(e == inf)
std::cerr << "inf";
else if(e == -inf)
std::cerr << "-inf";
else
std::cerr << e;
}
template <typename T>
void view(const T &e) {
std::cerr << e;
}
template <typename T, typename U>
void view(const std::pair<T, U> &p) {
std::cerr << "(";
view(p.first);
std::cerr << ", ";
view(p.second);
std::cerr << ")";
}
template <class T0, class T1, class T2>
void view(const std::tuple<T0, T1, T2> &p) {
std::cerr << "(";
view(std::get<0>(p));
std::cerr << ", ";
view(std::get<1>(p));
std::cerr << ", ";
view(std::get<2>(p));
std::cerr << ")";
}
template <class T0, class T1, class T2, class T3>
void view(const std::tuple<T0, T1, T2, T3> &p) {
std::cerr << "(";
view(std::get<0>(p));
std::cerr << ", ";
view(std::get<1>(p));
std::cerr << ", ";
view(std::get<2>(p));
std::cerr << ", ";
view(std::get<3>(p));
std::cerr << ")";
}
template <typename T>
void view(const std::set<T> &s) {
if(s.empty()) {
std::cerr << "{ }";
return;
}
std::cerr << "{ ";
for(auto &t : s) {
view(t);
std::cerr << ", ";
}
std::cerr << "\b\b }";
}
template <typename T>
void view(const std::unordered_set<T> &s) {
if(s.empty()) {
std::cerr << "{ }";
return;
}
std::cerr << "{ ";
for(auto &t : s) {
view(t);
std::cerr << ", ";
}
std::cerr << "\b\b }";
}
template <typename T>
void view(const std::multiset<T> &s) {
if(s.empty()) {
std::cerr << "{ }";
return;
}
std::cerr << "{ ";
for(auto &t : s) {
view(t);
std::cerr << ", ";
}
std::cerr << "\b\b }";
}
template <typename T>
void view(const std::unordered_multiset<T> &s) {
if(s.empty()) {
std::cerr << "{ }";
return;
}
std::cerr << "{ ";
for(auto &t : s) {
view(t);
std::cerr << ", ";
}
std::cerr << "\b\b }";
}
template <typename T>
void view(const std::vector<T> &v) {
if(v.empty()) {
std::cerr << "{ }";
return;
}
std::cerr << "{ ";
for(const auto &e : v) {
view(e);
std::cerr << ", ";
}
std::cerr << "\b\b }";
}
template <typename T, std::size_t ary_size>
void view(const std::array<T, ary_size> &v) {
if(v.empty()) {
std::cerr << "{ }";
return;
}
std::cerr << "{ ";
for(const auto &e : v) {
view(e);
std::cerr << ", ";
}
std::cerr << "\b\b }";
}
template <typename T>
void view(const std::vector<std::vector<T>> &vv) {
std::cerr << "{\n";
for(const auto &v : vv) {
std::cerr << "\t";
view(v);
std::cerr << '\n';
}
std::cerr << "}";
}
template <typename T, typename U>
void view(const std::vector<std::pair<T, U>> &v) {
std::cerr << "{\n";
for(const auto &c : v) {
std::cerr << "\t(";
view(c.first);
std::cerr << ", ";
view(c.second);
std::cerr << ")\n";
}
std::cerr << "}";
}
template <class T0, class T1, class T2>
void view(const std::vector<std::tuple<T0, T1, T2>> &v) {
if(v.empty()) {
std::cerr << "{ }";
return;
}
std::cerr << '{';
for(const auto &t : v) {
std::cerr << "\n\t";
view(t);
std::cerr << ",";
}
std::cerr << "\n}";
}
template <class T0, class T1, class T2, class T3>
void view(const std::vector<std::tuple<T0, T1, T2, T3>> &v) {
if(v.empty()) {
std::cerr << "{ }";
return;
}
std::cerr << '{';
for(const auto &t : v) {
std::cerr << "\n\t";
view(t);
std::cerr << ",";
}
std::cerr << "\n}";
}
template <typename T, typename U>
void view(const std::map<T, U> &m) {
std::cerr << "{\n";
for(const auto &t : m) {
std::cerr << "\t[";
view(t.first);
std::cerr << "] : ";
view(t.second);
std::cerr << '\n';
}
std::cerr << "}";
}
template <typename T, typename U>
void view(const std::unordered_map<T, U> &m) {
std::cerr << "{\n";
for(const auto &t : m) {
std::cerr << "\t[";
view(t.first);
std::cerr << "] : ";
view(t.second);
std::cerr << '\n';
}
std::cerr << "}";
}
} // namespace viewer
// when compiling : g++ foo.cpp -DLOCAL
#ifdef LOCAL
void debug_out() {}
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
viewer::view(H);
std::cerr << ", ";
debug_out(T...);
}
#define debug(...) \
do { \
std::cerr << __LINE__ << " [" << #__VA_ARGS__ << "] : ["; \
debug_out(__VA_ARGS__); \
std::cerr << "\b\b]\n"; \
} while(0)
#define dump(x) \
do { \
std::cerr << __LINE__ << " " << #x << " : "; \
viewer::view(x); \
std::cerr << '\n'; \
} while(0)
#else
#define debug(...) (void(0))
#define dump(x) (void(0))
#endif
#line 3 "/home/nok0/documents/programming/library/template/def_name.hpp"
#define pb push_back
#define eb emplace_back
#define SZ(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define popcnt(x) __builtin_popcountll(x)
template<class T = int>
using V = std::vector<T>;
template<class T = int>
using VV = std::vector<std::vector<T>>;
template<class T>
using pqup = std::priority_queue<T, std::vector<T>, std::greater<T>>;
using ll = long long;
using ld = long double;
using int128 = __int128_t;
using pii = std::pair<int, int>;
using pll = std::pair<long long, long long>;
#line 3 "/home/nok0/documents/programming/library/template/fast_io.hpp"
struct fast_io {
fast_io() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout << std::fixed << std::setprecision(15);
}
} fast_io_;
#line 3 "/home/nok0/documents/programming/library/template/input.hpp"
template<class T, class U>
std::istream &operator>>(std::istream &is, std::pair<T, U> &p) {
is >> p.first >> p.second;
return is;
}
template<class T>
std::istream &operator>>(std::istream &is, std::vector<T> &v) {
for (T &i : v) is >> i;
return is;
}
std::istream &operator>>(std::istream &is, __int128_t &a) {
std::string s;
is >> s;
__int128_t ret = 0;
for (int i = 0; i < (int)s.length(); i++)
if ('0' <= s[i] and s[i] <= '9')
ret = 10 * ret + s[i] - '0';
a = ret * (s[0] == '-' ? -1 : 1);
return is;
}
namespace scanner {
void scan(int &a) { std::cin >> a; }
void scan(long long &a) { std::cin >> a; }
void scan(std::string &a) { std::cin >> a; }
void scan(char &a) { std::cin >> a; }
void scan(char a[]) { std::scanf("%s", a); }
void scan(double &a) { std::cin >> a; }
void scan(long double &a) { std::cin >> a; }
template<class T, class U>
void scan(std::pair<T, U> &p) { std::cin >> p; }
template<class T>
void scan(std::vector<T> &a) { std::cin >> a; }
void INPUT() {}
template<class Head, class... Tail>
void INPUT(Head &head, Tail &...tail) {
scan(head);
INPUT(tail...);
}
} // namespace scanner
#define VEC(type, name, size) \
std::vector<type> name(size); \
scanner::INPUT(name)
#define VVEC(type, name, h, w) \
std::vector<std::vector<type>> name(h, std::vector<type>(w)); \
scanner::INPUT(name)
#define INT(...) \
int __VA_ARGS__; \
scanner::INPUT(__VA_ARGS__)
#define LL(...) \
long long __VA_ARGS__; \
scanner::INPUT(__VA_ARGS__)
#define STR(...) \
std::string __VA_ARGS__; \
scanner::INPUT(__VA_ARGS__)
#define CHAR(...) \
char __VA_ARGS__; \
scanner::INPUT(__VA_ARGS__)
#define DOUBLE(...) \
double __VA_ARGS__; \
scanner::INPUT(__VA_ARGS__)
#define LD(...) \
long double __VA_ARGS__; \
scanner::INPUT(__VA_ARGS__)
#line 3 "/home/nok0/documents/programming/library/template/math.hpp"
template <class T, class U>
inline bool chmin(T &a, const U &b) { return a > b ? a = b, true : false; }
template <class T, class U>
inline bool chmax(T &a, const U &b) { return a < b ? a = b, true : false; }
template <class T>
T divup(T x, T y) { return (x + y - 1) / y; }
template <class T>
T POW(T a, long long n) {
T ret = 1;
while(n) {
if(n & 1) ret *= a;
a *= a;
n >>= 1;
}
return ret;
}
long long POW(long long a, long long n, const int mod) {
long long ret = 1;
a = (a % mod + mod) % mod;
while(n) {
if(n & 1) (ret *= a) %= mod;
(a *= a) %= mod;
n >>= 1;
}
return ret;
}
template <class T, class F>
T bin_search(T ok, T ng, const F &f) {
while(abs(ok - ng) > 1) {
T mid = (ok + ng) >> 1;
(f(mid) ? ok : ng) = mid;
}
return ok;
}
template <class T, class F>
T bin_search(T ok, T ng, const F &f, int loop) {
for(int i = 0; i < loop; i++) {
T mid = (ok + ng) / 2;
(f(mid) ? ok : ng) = mid;
}
return ok;
}
#line 3 "/home/nok0/documents/programming/library/template/output.hpp"
template<class T, class U>
std::ostream &operator<<(std::ostream &os, const std::pair<T, U> &p) {
os << p.first << " " << p.second;
return os;
}
template<class T>
std::ostream &operator<<(std::ostream &os, const std::vector<T> &a) {
for (int i = 0; i < int(a.size()); ++i) {
if (i) os << " ";
os << a[i];
}
return os;
}
std::ostream &operator<<(std::ostream &dest, __int128_t &value) {
std::ostream::sentry s(dest);
if (s) {
__uint128_t tmp = value < 0 ? -value : value;
char buffer[128];
char *d = std::end(buffer);
do {
--d;
*d = "0123456789"[tmp % 10];
tmp /= 10;
} while (tmp != 0);
if (value < 0) {
--d;
*d = '-';
}
int len = std::end(buffer) - d;
if (dest.rdbuf()->sputn(d, len) != len) {
dest.setstate(std::ios_base::badbit);
}
}
return dest;
}
template<class T>
void print(const T a) { std::cout << a << '\n'; }
template<class Head, class... Tail>
void print(Head H, Tail... T) {
std::cout << H << ' ';
print(T...);
}
template<class T>
void printel(const T a) { std::cout << a << '\n'; }
template<class T>
void printel(const std::vector<T> &a) {
for (const auto &v : a)
std::cout << v << '\n';
}
template<class Head, class... Tail>
void printel(Head H, Tail... T) {
std::cout << H << '\n';
printel(T...);
}
void Yes(const bool b = true) { std::cout << (b ? "Yes\n" : "No\n"); }
void No() { std::cout << "No\n"; }
void YES(const bool b = true) { std::cout << (b ? "YES\n" : "NO\n"); }
void NO() { std::cout << "NO\n"; }
#line 2 "/home/nok0/documents/programming/library/template/rep.hpp"
#define foa(v, a) for (auto &v : a)
#define repname(a, b, c, d, e, ...) e
#define rep(...) repname(__VA_ARGS__, rep3, rep2, rep1, rep0)(__VA_ARGS__)
#define rep0(x) for (int rep_counter = 0; rep_counter < (x); ++rep_counter)
#define rep1(i, x) for (int i = 0; i < (x); ++i)
#define rep2(i, l, r) for (int i = (l); i < (r); ++i)
#define rep3(i, l, r, c) for (int i = (l); i < (r); i += (c))
#define repsname(a, b, c, ...) c
#define reps(...) repsname(__VA_ARGS__, reps1, reps0)(__VA_ARGS__)
#define reps0(x) for (int reps_counter = 1; reps_counter <= (x); ++reps_counter)
#define reps1(i, x) for (int i = 1; i <= (x); ++i)
#define rrepname(a, b, c, ...) c
#define rrep(...) rrepname(__VA_ARGS__, rrep1, rrep0)(__VA_ARGS__)
#define rrep0(x) for (int rrep_counter = (x)-1; rrep_counter >= 0; --rrep_counter)
#define rrep1(i, x) for (int i = (x)-1; i >= 0; --i)
#line 3 "/home/nok0/documents/programming/library/template/vector.hpp"
template <class T>
int lb(const std::vector<T> &a, const T x) { return std::distance((a).begin(), std::lower_bound((a).begin(), (a).end(), (x))); }
template <class T>
int ub(const std::vector<T> &a, const T x) { return std::distance((a).begin(), std::upper_bound((a).begin(), (a).end(), (x))); }
template <class T>
void UNIQUE(std::vector<T> &a) {
std::sort(a.begin(), a.end());
a.erase(std::unique(a.begin(), a.end()), a.end());
}
template <class T>
std::vector<T> press(std::vector<T> &a) {
auto res = a;
UNIQUE(res);
for(auto &v : a)
v = lb(res, v);
return res;
}
#define SORTname(a, b, c, ...) c
#define SORT(...) SORTname(__VA_ARGS__, SORT1, SORT0, ...)(__VA_ARGS__)
#define SORT0(a) std::sort((a).begin(), (a).end())
#define SORT1(a, c) std::sort((a).begin(), (a).end(), [](const auto x, const auto y) { return x c y; })
template <class T>
void ADD(std::vector<T> &a, const T x = 1) {
for(auto &v : a) v += x;
}
template <class T>
void SUB(std::vector<T> &a, const T x = 1) {
for(auto &v : a) v -= x;
}
template <class T>
struct cum_vector {
public:
cum_vector() = default;
template <class U>
cum_vector(const std::vector<U> &vec) : cum((int)vec.size() + 1) {
for(int i = 0; i < (int)vec.size(); i++)
cum[i + 1] = cum[i] + vec[i];
}
T prod(int l, int r) {
return cum[r] - cum[l];
}
private:
std::vector<T> cum;
};
std::vector<std::pair<char, int>> rle(const std::string &s) {
const int n = s.size();
std::vector<std::pair<char, int>> ret;
for(int l = 0; l < n;) {
int r = l + 1;
for(; r < n and s[l] == s[r]; r++) {}
ret.emplace_back(s[l], r - l);
l = r;
}
return ret;
}
template <class T>
std::vector<std::pair<T, int>> rle(const std::vector<T> &v) {
int n = v.size();
std::vector<std::pair<T, int>> ret;
for(int l = 0; l < n;) {
int r = l + 1;
for(; r < n and v[l] == v[r]; r++) {}
ret.emplace_back(v[l], r - l);
l = r;
}
return ret;
}
std::vector<int> iota(int n) {
std::vector<int> p(n);
std::iota(p.begin(), p.end(), 0);
return p;
}
#line 11 "/home/nok0/documents/programming/library/template/all"
using namespace std;
#line 3 "main.cpp"
void main_();
int main() {
int t = 1;
while(t--) main_();
}
map<V<>, int> memo;
int grundy(vector<int> v) {
if(memo.count(v)) return memo[v];
int n = SZ(v);
range_set<int> st;
rep(i, n) {
if(v[i] != -1) continue;
int l = (i - 1 >= 0 ? v[i - 1] : -1);
int r = (i + 1 < n ? v[i + 1] : -1);
rep(k, 2) {
if(k != l and k != r) {
auto c = v;
c[i] = k;
st.insert(grundy(c));
}
}
}
return memo[v] = st.mex();
}
void main_() {
// reps(i, 10) {
// V<> v(i + 2, -1);
// v[0] = 0;
// v[i + 1] = 0;
// debug(grundy(v));
// }
// reps(i, 10) {
// V<> v(i + 2, -1);
// v[0] = 0;
// v[i + 1] = 1;
// debug(grundy(v));
// }
// reps(i, 10) {
// V<> v(i + 1, -1);
// v[i] = 1;
// debug(grundy(v));
// }
// reps(i, 10) {
// V<> v(i, -1);
// debug(grundy(v));
// }
// return;
LL(m);
INT(n);
if(!n) {
print(m & 1 ? "Takahashi" : "Aoki");
return;
}
V<ll> x(n), y(n);
rep(i, n) { cin >> x[i] >> y[i]; }
ll fold = 0;
rep(i, n) {
if(i == 0) {
if(x[i] > 1) {
fold ^= x[i] - 1;
}
}
if(i == n - 1) {
if(x[i] < m) {
fold ^= (m - x[i]);
}
} else {
if(y[i] == y[i + 1]) {
fold ^= 1;
}
}
}
print(fold ? "Takahashi" : "Aoki");
}
Submission Info
Submission Time
2022-10-16 21:24:00+0900
Task
C - 01 Game
User
nok0
Language
C++ (GCC 9.2.1)
Score
600
Code Size
18683 Byte
Status
AC
Exec Time
46 ms
Memory
6352 KiB
Compile Error
/home/nok0/documents/programming/library/template/input.hpp: In function ‘void scanner::scan(char*)’:
/home/nok0/documents/programming/library/template/input.hpp:29:33: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
600 / 600
Status
Set Name
Test Cases
Sample
example0.txt, example1.txt, example2.txt
All
000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, example0.txt, example1.txt, example2.txt
Case Name
Status
Exec Time
Memory
000.txt
AC
8 ms
3468 KiB
001.txt
AC
2 ms
3468 KiB
002.txt
AC
2 ms
3456 KiB
003.txt
AC
2 ms
3620 KiB
004.txt
AC
2 ms
3548 KiB
005.txt
AC
2 ms
3548 KiB
006.txt
AC
2 ms
3524 KiB
007.txt
AC
2 ms
3408 KiB
008.txt
AC
32 ms
6164 KiB
009.txt
AC
32 ms
6276 KiB
010.txt
AC
2 ms
3540 KiB
011.txt
AC
2 ms
3544 KiB
012.txt
AC
2 ms
3456 KiB
013.txt
AC
31 ms
4988 KiB
014.txt
AC
22 ms
4188 KiB
015.txt
AC
29 ms
5028 KiB
016.txt
AC
44 ms
6324 KiB
017.txt
AC
44 ms
6236 KiB
018.txt
AC
46 ms
6156 KiB
019.txt
AC
44 ms
6180 KiB
020.txt
AC
44 ms
6352 KiB
021.txt
AC
44 ms
6224 KiB
022.txt
AC
44 ms
6288 KiB
023.txt
AC
44 ms
6164 KiB
024.txt
AC
43 ms
6284 KiB
025.txt
AC
46 ms
6180 KiB
026.txt
AC
39 ms
6236 KiB
027.txt
AC
43 ms
6352 KiB
028.txt
AC
42 ms
6340 KiB
029.txt
AC
38 ms
6316 KiB
030.txt
AC
42 ms
6224 KiB
031.txt
AC
38 ms
6284 KiB
032.txt
AC
38 ms
6220 KiB
033.txt
AC
43 ms
6272 KiB
034.txt
AC
42 ms
6316 KiB
035.txt
AC
43 ms
6232 KiB
036.txt
AC
43 ms
6284 KiB
example0.txt
AC
2 ms
3584 KiB
example1.txt
AC
2 ms
3464 KiB
example2.txt
AC
2 ms
3548 KiB