답안 #260540

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
260540 2020-08-10T13:42:28 Z WLZ Linear Garden (IOI08_linear_garden) C++14
100 / 100
22 ms 10060 KB
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  long long MOD;
  string s;
  cin >> n >> MOD >> s;
  vector<long long> pw(n + 1);
  pw[0] = 1;
  for (int i = 1; i <= n; i++) {
    pw[i] = (pw[i - 1] * 2) % MOD;
  }
  long long ans = 0;
  int lo = 0, hi = 0, cur = 0;
  int k = n;
  for (auto& c : s) {
    k--;
    if (c == 'P') {
      int tmp = cur + 1;
      int tmp_lo = min(lo, tmp);
      int tmp_hi = max(hi, tmp);
      if (tmp_hi - tmp_lo == 2) {
        if (tmp == (tmp_hi + tmp_lo) / 2) {
          ans = (ans + pw[(k + 1) / 2]) % MOD;
        } else {
          ans = (ans + pw[k / 2]) % MOD;
        }
      } else if (tmp_hi - tmp_lo == 1) {
        ans = ((ans + pw[k / 2] + pw[(k + 1) / 2] - 1) % MOD + MOD) % MOD; 
      }
    }
    if (c == 'L') {
      cur++;
    } else {
      cur--;
    }
    lo = min(lo, cur);
    hi = max(hi, cur);
  }
  cout << (ans + 1) % MOD << '\n';
  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 288 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 288 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 0 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1056 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1152 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 3476 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 4372 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 5524 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 6556 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 10012 KB Output is correct
2 Correct 18 ms 10012 KB Output is correct
3 Correct 22 ms 10060 KB Output is correct