Submission #496922

#TimeUsernameProblemLanguageResultExecution timeMemory
496922abc864197532DEL13 (info1cup18_del13)C++17
0 / 100
12 ms3024 KiB
#include <bits/stdc++.h> using namespace std; #define lli long long int #define mp make_pair #define eb emplace_back #define pb push_back #define X first #define Y second #define pii pair<int,int> #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() void abc() {cout << endl;} template <typename T, typename ...U> void abc(T i, U ...j) { cout << i << ' ', abc(j...); } template <typename T> void printv(T l, T r) { for (; l != r; ++l) cout << *l << " \n"[l + 1 == r]; } #ifdef Doludu #define test(x...) abc("[" + string(#x) + "]", x); #else #define test(x...) void(0); #endif const int N = 1001; int main () { ios::sync_with_stdio(false); cin.tie(0); int t; cin >> t; while (t--) { int n, m; cin >> n >> m; vector <int> a(m + 1, 0); vector <int> rem; for (int i = 1; i <= m; ++i) { cin >> a[i]; rem.pb(a[i] - a[i - 1] - 1); } rem.pb(n - a[m]); vector <int> move, fr; vector <vector <int>> dp(m + 1, vector <int>(3, false)); dp[0][0] = true; for (int i = 0; i < m; ++i) for (int f = 0; f <= 2; ++f) if (dp[i][f]) { int left = rem[i] - f; assert(left >= 0); if (left == 0) { dp[i + 1][0] = true; continue; } if (left & 1) { // optimal 1 if (rem[i + 1] >= 1) dp[i + 1][1] = true; } else { if (f) { // optimal 0 or 2 dp[i + 1][0] = true; if (rem[i + 1] >= 2) dp[i + 1][2] = true; } else { // must 2 if (rem[i + 1] >= 2) dp[i + 1][2] = true; } } } bool is = false; for (int i = 0; i <= 2; ++i) is |= dp[m][i] && rem[m] >= i; if (is) { cout << 0 << endl; cout << endl; } else { cout << -1 << endl; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...