Submission #1474519


Source Code Expand

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>

// c++11
#include <array>
#include <tuple>
#include <unordered_map>
#include <unordered_set>

#define mp make_pair
#define mt make_tuple
#define rep(i, n) for (int i = 0; i < (n); i++)

using namespace std;

using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;

const int INF = 1 << 29;
const double EPS = 1e-9;
const ll MOD = 1000000007;

const int dx[] = {1, 0, -1, 0}, dy[] = {0, -1, 0, 1};
int N,Q;
const int MAX_N = 100100;
bool dp[MAX_N][2];
int main() {
  cin >> N >> Q;
  dp[0][0] = true;
  for (int i = 0; i < Q; i++){
    int a,b;
    cin >> a >> b;
    a--,b--;
    if (dp[a][0]){
      if (a - 1 >= 0){
        dp[a - 1][1] = true;
      }
      if (a + 1 < N){
        dp[a + 1][1] = true;
      }
    }
    if (dp[b][0]){
      if (b - 1 >= 0){
        dp[b - 1][1] = true;
      }
      if (b + 1 < N){
        dp[b + 1][1] = true;
      }
    }

    bool a0,b0;
    a0 = b0 = false;
    bool a1,b1;
    a1 = b1 = false;
    if (dp[a][0]){
      b0 |= true;
    }
    if (dp[a][1]){
      b1 |= true;
    }
    if (dp[b][0]){
      a0 |= true;
    }
    if (dp[b][1]){
      a1 |= true;
    }
    if (a - 1 >= 0 and dp[a - 1][0]){
      b1 |= true;
    }
    if (a + 1 < N and dp[a + 1][0]){
      b1 |= true;
    }
    if (b - 1 >= 0 and dp[b - 1][0]){
      a1 |= true;
    }
    if (b + 1 < N and dp[b + 1][0]){
      a1 |= true;
    }
    dp[a][0] = a0;
    dp[a][1] = a1;
    dp[b][0] = b0;
    dp[b][1] = b1;

  }

  int cnt = 0;
  for (int i = 0; i < N; i++){
    if (i - 1 >= 0){
      dp[i - 1][1] |= dp[i][0];
    }
    if (i + 1 < N){
      dp[i + 1][1] |= dp[i][0];
    }
  }
  for (int i = 0; i < N; i++){
    cnt += (dp[i][0] | dp[i][1]);
  }
  cout << cnt << endl;
  return 0;
}

Submission Info

Submission Time
Task G - Magician
User togatoga
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2339 Byte
Status AC
Exec Time 74 ms
Memory 512 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 2
AC × 23
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All sample_01.txt, sample_02.txt, sample_01.txt, sample_02.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
subtask1_01.txt AC 70 ms 384 KB
subtask1_02.txt AC 72 ms 384 KB
subtask1_03.txt AC 70 ms 384 KB
subtask1_04.txt AC 74 ms 384 KB
subtask1_05.txt AC 70 ms 384 KB
subtask1_06.txt AC 72 ms 384 KB
subtask1_07.txt AC 70 ms 384 KB
subtask1_08.txt AC 72 ms 384 KB
subtask1_09.txt AC 70 ms 384 KB
subtask1_10.txt AC 72 ms 384 KB
subtask1_11.txt AC 71 ms 384 KB
subtask1_12.txt AC 72 ms 384 KB
subtask1_13.txt AC 70 ms 384 KB
subtask1_14.txt AC 72 ms 384 KB
subtask1_15.txt AC 70 ms 384 KB
subtask1_16.txt AC 72 ms 384 KB
subtask1_17.txt AC 71 ms 512 KB
subtask1_18.txt AC 71 ms 384 KB
subtask1_19.txt AC 70 ms 384 KB