티스토리 뷰
문제
19588번: 상품권 준비
“4”가 출제진이 되어야 하며, [“2”, "7”], [“6”, “8”] 로 팀을 구성하는 것이 (10 × 20 + 30 × 40)으로 최강의 팀 구성이다. 따라서 총 (2 ⊕ 7) + (6 ⊕ 8) = 19가 준비해야 할 총액이다.
www.acmicpc.net
문제 풀이
쿼리마다 계산한다면 $O(a*M*Q)$로 TLE가 난다.
이에 누적xor배열을 만들어 pxor[b+am]-pxor[b]꼴의 형태로 답을 내려했으나 누적합과 달리 xor연산에서는 단지 뺀다고 (b + 1) ~ (b + a *m)의 xor연산값이 나오지 않을뿐더러 문제에서는 m개 덩어리만큼씩 xor한 합을 구해야했다.
고민해봐도 모르겠길래 해설을 보니 x ⊕ x= 0을 이용하여 m개씩 묶음의 xor을 계산했고, 누적합과 비슷하게 dp배열을 사용하여 해결했다.
pxor2[i] = pxor2[i - m] + (pxor[i] ⊕ pxor[i - m]) // pxor2[i] = i를 마지막인덱스로 m개씩 xor한 묶음을 더한 값
코드
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
int n, m, x, y, q, a, b;
vector<pll> v;
vector<ll> pxor, pxor2;
bool cmp(pll &a, pll &b) {
return a.first > b.first;
}
int main() {
cin.tie(NULL); cout.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> m;
v.resize(n + 1), pxor.resize(n + 1), pxor2.resize(n + 1);
for (int i = 1; i <= n; i++) {
cin >> x >> y;
v[i] = { x, y };
}
auto it = v.begin();
sort(it + 1, v.end(), cmp);
for (int i = 1; i <= n; i++)
pxor[i] = (v[i].second ^ pxor[i - 1]);
for (int i = 1; i <= n; i++)
if (i >= m) pxor2[i] = pxor2[i - m] + (pxor[i] ^ pxor[i - m]);
cin >> q;
while (q--) {
cin >> a >> b;
cout << pxor2[b + a* m] - pxor2[b] << '\n';
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준 16402] 제국 (0) | 2020.09.05 |
---|---|
[백준 19576] 약수 (0) | 2020.08.31 |
[백준 19591] 독특한 계산기 (0) | 2020.08.31 |
[백준 1662] 압축 (0) | 2020.08.31 |
[백준 17080] 결함게임 (0) | 2020.08.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 누적합
- 2022 KAKAO BLIND RECRUITMENT
- 시뮬레이션
- 동적계획법
- DP
- 카카오 2차코딩테스트
- 2020 KAKAO BLIND RECRUITMENT
- 2022 카카오블라인드
- 2021 카카오 블라인드
- 2021 KAKAO BLIND
- 구현
- 파싱
- 백준
- 카카오 2021
- Kakaoblind
- 투포인터
- BFS
- 카카오 2020 인턴십
- 프로그래머스 월간코드챌린지
- 게임이론
- 표 편집
- 2022 카카오 블라인드 코딩테스트
- 유니온파인드
- 위클리 챌린지
- 카카오 표 편집
- 프로그래머스 위클리 9주차
- 트리
- 이분탐색
- 카카오 인턴십
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함