Submission #34232695
Source Code Expand
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#pragma GCC optimize("03")
#pragma GCC target("popcnt")
#pragma GCC optimize "trapv"
using namespace std;
using namespace __gnu_pbds;
using int64 = int64_t;
#define double long double
#define int int64
#define vi vector<int>
#define mii map<int, int>
#define pii pair<int, int>
#define vii vector<pii>
#define ff first
#define ss second
#define pf push_front
#define pb push_back
#define ppf pop_front()
#define ppb pop_back()
#define in insert
#define lb lower_bound
#define ub upper_bound
#define fr front()
#define bk back()
#define endl '\n'
#define MP make_pair
#define MSB(x) __lg(x)
#define LSB(x) (int)log2((x) & -(x))
#define SORT(x) is_sorted(all(x))
#define size(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define MAX(x) *max_element(all(x))
#define MIN(x) *min_element(all(x))
#define SUM(x) accumulate(all(x), 0LL)
#define MEM(x, y) memset(x, y, sizeof(x))
#define CNT(x) __builtin_popcountll(x)
#define rep(i, a, b) for (int i = (a); i < (b); i++)
#define bck(i, a, b) for (int i = (a) - 1; i >= (b); i--)
#define lrot(a, l, r, k) rotate(a.begin() + l, a.begin() + l + (k % (r - l + 1)), a.begin() + r + 1)
#define rrot(a, l, r, k) rotate(a.begin() + l, a.begin() + r + 1 - (k % (r - l + 1)), a.begin() + r + 1)
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: TEMPLATES ::::::::::::::::::::::::::::::::::::::::::::::::::: */
class custom_hash
{
public:
static uint64_t splitmix64(uint64_t x)
{
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const
{
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
template<typename T1, typename T2> // cin >> pair<T1, T2>
istream& operator>>(istream &in, pair<T1, T2> &p){ return (in >> p.first >> p.second);}
template<typename T> // cin >> vector<T>
istream& operator>>(istream &in, vector<T> &v){for(auto &it: v) cin >> it; return in;}
template<typename T1, typename T2> // cout << pair<T1, T2>
ostream& operator<<(ostream &out, const pair<T1, T2> &p){return (out << p.first << " " << p.second); }
template<typename T> //cout << vector<T>
ostream& operator<<(ostream &out, const vector<T> &c){for (auto &it: c) cout << it << " "; return out;}
template<class T1, class T2 = vector<T1>, class T3 = less<T1>>
ostream& operator<<(ostream& out, priority_queue<T1, T2, T3> const& pq){
static priority_queue<T1, T2, T3> a = pq;
out << "{"; string sep;
while(!a.empty()){out << sep << a.top(); sep = ", "; a.pop();}
return (out << "}");
}
template<class T>
ostream& operator<<(ostream& out, queue<T> const& q){
static queue<T> a = q;
out << "{"; string sep;
while(!a.empty()){out << sep << a.front(); sep = ", "; a.pop();}
return (out << "}");
}
template<class T>
ostream& operator<<(ostream& out, stack<T> const& s){
static stack<T> a = s;
out << "{"; string sep;
while(!a.empty()){out << sep << a.top(); sep = ", "; a.pop();}
return (out << "}");
}
template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename T> using min_heap = priority_queue<T, vector<T>, greater<T>>;
template <typename T> using vec = vector<vector<T>>;
template <typename T1, int T2> using var = vector<array<T1, T2>>;
template <typename T1, typename T2> using umap = unordered_map<T1, T2, custom_hash>;
template <typename T1, typename T2> using gphash = gp_hash_table<T1, T2, custom_hash>;
template <typename T1, typename T2> void amax(T1 &x, T2 y) {if(x < y) x = y;}
template <typename T1, typename T2> void amin(T1 &x, T2 y) {if(x > y) x = y;}
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: DEBUGGING AREA :::::::::::::::::::::::::::::::::::::::::::::::::::::: */
void __print(int x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(bool x) {cerr << (x ? "true" : "false");}
void _print() {cerr << "]\n";}
template <typename T1, typename T2> void __print(const pair<T1, T2> &x) {cerr << '{'; __print(x.ff); cerr << ','; __print(x.ss); cerr << '}';}
template <typename T> void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
template <typename T1, typename... T2> void _print(T1 t, T2... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef coderdhanraj
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: UNIVERSAL CONSTANTS ::::::::::::::::::::::::::::::::::::::::::::::::::: */
const double pi = acos(-1.0);
const double eps = 1e-9;
const int maxn = 2e5 + 10;
const int maxx = 2e6 + 10;
const int mod = 1e9 + 7;
const int mod2 = 998244353LL;
const int64 inf = 2e18;
const int64 INF = 9e18;
const string dir[8] = {"D", "L", "R", "U", "DL", "DR", "UL", "UR"};
const int dx[16] = {1, 0, 0, -1, 1, 1, -1, -1, 2, 2, 1, 1, -1, -1, -2, -2};
const int dy[16] = {0, -1, 1, 0, -1, 1, -1, 1, -1, 1, -2, 2, -2, 2, -1, 1};
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: USEFUL FUNCTIONS :::::::::::::::::::::::::::::::::::::::::::::::::::: */
int testcase;
int iseq(double x, double y) {return abs(x - y) < eps;}
bool isSquare(int x) {int y = sqrtl(x); return x == y * y;}
bool ispow2(int x) {return (x ? !(x & (x - 1)) : 0);}
int ceill(int x, int y) {return (x >= 0 ? (x + y - 1) / y : x / y);}
int floorr(int x, int y) {return x / y - (x ^ y < 0 and x % y);}
int gcd(int x, int y) {return (x ? gcd(y % x, x) : y);}
int lcm(int x, int y) {return x / gcd(x, y) * y;}
void google() {cout << "Case #" << ++testcase << ": ";}
int expo(int x, int y, int64 m = INF) {int res = 1; x = x % m; while (y > 0){if (y & 1) res = (res * x) % m; y = y >> 1LL, x = (x * x) % m;} return res;}
int gen(int x, int y) {srand(time(0)); return x + rand() % (y - x + 1);}
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: MODULUS OPERATIONS :::::::::::::::::::::::::::::::::::::::::::::::::::: */
int mod_inv(int n, int m) {return expo(n, m - 2, m);}
int mod_add(int a, int b, int m) {a = a % m; b = b % m; return (((a + b) % m) + m) % m;}
int mod_mul(int a, int b, int m) {a = a % m; b = b % m; return (((a * b) % m) + m) % m;}
int mod_sub(int a, int b, int m) {a = a % m; b = b % m; return (((a - b) % m) + m) % m;}
int mod_div(int a, int b, int m) {a = a % m; b = b % m; return (mod_mul(a, mod_inv(b, m), m));}
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: FAST INPUT/OUTPUT ::::::::::::::::::::::::::::::::::::::::::::::::::::: */
void IOS()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cout.precision(20);
cout.setf(ios::fixed);
// #undef endl // uncomment for interactives
// #undef int // uncomment for MLEs or TLEs
// find_by_order(K): Returns an iterator to the Kth largest element (counting from zero)
// order_of_key (K): Returns the number of items that are strictly smaller than K
}
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::: SOLUTION TO THE PROBLEM ::::::::::::::::::::::::::::::::::::::::::::::::: */
void solve()
{
int n, m, a, b, c, d, e, f;
cin >> n >> m >> a >> b >> c >> d >> e >> f;
map<pii, bool> cant;
rep(i, 0, m)
{
int x, y;
cin >> x >> y;
cant[{x, y}] = 1;
}
int ans = 0;
map<pii, int> dp;
dp[{0, 0}] = 1;
rep(i, 0, n)
{
map<pii, int> ndp;
for (auto &ee : dp)
{
if (cant.find(ee.ff) != cant.end())
continue;
int x = ee.ff.ff, y = ee.ff.ss;
ndp[{x + a, y + b}] = (ndp[{x + a, y + b}] + dp[ee.ff]) % mod2;
ndp[{x + c, y + d}] = (ndp[{x + c, y + d}] + dp[ee.ff]) % mod2;
ndp[{x + e, y + f}] = (ndp[{x + e, y + f}] + dp[ee.ff]) % mod2;
}
dp.swap(ndp);
}
for (auto &e : dp)
{
if (cant.find(e.ff) != cant.end())
continue;
ans = (ans + e.ss) % mod2;
}
cout << ans << endl;
}
int32_t main()
{
IOS();
int ttc = 1;
// cin >> ttc;
while (ttc--)
solve();
return 0;
}
Submission Info
Submission Time
2022-08-21 21:56:25+0900
Task
E - Warp
User
coderdhanraj
Language
C++ (GCC 9.2.1)
Score
500
Code Size
8747 Byte
Status
AC
Exec Time
2486 ms
Memory
9300 KiB
Compile Error
./Main.cpp: In function ‘int64 floorr(int64, int64)’:
./Main.cpp:148:49: warning: suggest parentheses around comparison in operand of ‘^’ [-Wparentheses]
148 | int floorr(int x, int y) {return x / y - (x ^ y < 0 and x % y);}
| ~~^~~
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
500 / 500
Status
Set Name
Test Cases
Sample
sample_01.txt, sample_02.txt, sample_03.txt
All
random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, sample_01.txt, sample_02.txt, sample_03.txt
Case Name
Status
Exec Time
Memory
random_01.txt
AC
2137 ms
9296 KiB
random_02.txt
AC
838 ms
6768 KiB
random_03.txt
AC
2122 ms
9260 KiB
random_04.txt
AC
8 ms
3712 KiB
random_05.txt
AC
2047 ms
9240 KiB
random_06.txt
AC
325 ms
5208 KiB
random_07.txt
AC
2096 ms
9264 KiB
random_08.txt
AC
3 ms
3748 KiB
random_09.txt
AC
2036 ms
9300 KiB
random_10.txt
AC
9 ms
3616 KiB
random_11.txt
AC
2103 ms
9184 KiB
random_12.txt
AC
838 ms
6764 KiB
random_13.txt
AC
2173 ms
9236 KiB
random_14.txt
AC
2 ms
3576 KiB
random_15.txt
AC
2068 ms
9260 KiB
random_16.txt
AC
42 ms
3960 KiB
random_17.txt
AC
2 ms
3536 KiB
random_18.txt
AC
2079 ms
9244 KiB
random_19.txt
AC
2 ms
3652 KiB
random_20.txt
AC
2221 ms
9236 KiB
random_21.txt
AC
2 ms
3628 KiB
random_22.txt
AC
2058 ms
9160 KiB
random_23.txt
AC
2 ms
3588 KiB
random_24.txt
AC
2486 ms
9276 KiB
random_25.txt
AC
2368 ms
9188 KiB
random_26.txt
AC
2415 ms
9272 KiB
random_27.txt
AC
2427 ms
9224 KiB
sample_01.txt
AC
2 ms
3552 KiB
sample_02.txt
AC
2 ms
3508 KiB
sample_03.txt
AC
2298 ms
9248 KiB