AtCoder Beginner Contest 329
ย - Last update: 2023-11-18

ABC 329 Upsolving

  • ๋Œ€ํšŒ ์ฐธ๊ฐ€ ์œ ๋ฌด: Y
  • ์ตœ์ข… Performance: 1225 (Rank: 1757 / 10234)
  • Round ๋งํฌ: Top / Tasks
  • ๋ฌธ์ œ๋ณ„ ๊ฒฐ๊ณผ
ABCDEFG
AC
AC
AC
AC
-
AC
-

F์—์„œ unique ์‚ฌ์šฉ ๊ด€๋ จ ์‚ฝ์งˆ์„ ํ–ˆ๊ณ , E๋ฅผ ๋ชปํ’€์–ด์„œ ์•„์‰ฌ์› ๋‹ค. ๋งŒ์•ฝ F๊นŒ์ง€ ๋น ๋ฅด๊ฒŒ ํ’€์—ˆ์œผ๋ฉด ์˜๋กœ์šฐ ํผํฌ๋„ ๋‚˜์˜ค๋Š” ์…‹์ด์—ˆ๋‹ค.

A - Spread

๋ฌธ์ž์—ด ์‚ฌ์ด์— ๋„์–ด์“ฐ๊ธฐ๋ฅผ ํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

B - Next

๊ฐ€์žฅ ํฐ ์ˆ˜๋ณด๋‹ค ํ•˜๋‚˜ ์ž‘์€ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ. set์„ ์จ์„œ ๋งจ ๋’ค ๋ฐ”๋กœ ์•ž ์›์†Œ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

C - Count xxx

๋ฌธ์ œ๋ฅผ ์ฝ๋‹ค๊ฐ€ ์ด๊ฑฐ ๋„ˆ๋ฌด ๋‚œ์ด๋„ ์žˆ๋Š”๊ฒŒ C์— ๋‚˜์˜จ๊ฒŒ ์•„๋‹Œ๊ฐ€? ํ•˜๋‹ค๊ฐ€ ์ž์„ธํžˆ ๋ณด๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ์—ฐ์†๋œ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฌธ์ œ์˜€๋‹ค. map์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

D - Election Quick Report

pq๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์•„๋ž˜ ๋ฐฑ์ค€ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•˜๋‹ค.

E - Stamp (To be upsolved...)

๋ฌธ์ž์—ด์˜ prefix์™€ suffix์˜ ๋ชจ๋“œ๋ฅผ ๋‚˜๋ˆ ์„œ ํ’€์–ด๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ž˜ ์•ˆ๋๋‹ค. ๋‹ค์‹œ ํ’€์–ด๋ณผ ์˜ˆ์ •.

F - Colored Ball

bitset์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š”๋ฐ, small to large๊ฐ€ ์ •ํ•ด๋ผ๊ณ  ํ•œ๋‹ค. ๋‚˜๋Š” bitset์œผ๋กœ ํ’€์—ˆ๋‹ค.

๋‹ค๋งŒ ๋ชจ๋“  ์ƒ์ž์— ๋Œ€ํ•ด bitset์„ ๋งŒ๋“ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠน์ • ์‚ฌ์ด์ฆˆ ์ด์ƒ์ด ๋  ๋•Œ bitset์œผ๋กœ ์ „ํ™˜ํ•˜๋„๋ก ํ•˜๋ฉด ๋œ๋‹ค.

์ด ๊ณผ์ •์—์„œ ์ด์ œ vector -> bitset์œผ๋กœ ์ „ํ™˜๋˜๋Š”๋ฐ, stack์„ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” bitset์€ ๊พธ์ค€ํžˆ ์ง€์›Œ์ฃผ๋ฉด์„œ ํ• ๋‹นํ•˜๋ฉด ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋Œ€์ถฉ ์•„๋ž˜์™€ ๊ฐ™์€ ๋Š๋‚Œ์œผ๋กœ ํ• ๋‹นํ–ˆ๋‹ค.

vector<bitset<200001>> bs(20000);
vector<int> s[200010];
stack<int> deleted;
int bsCnt;
int newBs() {
if (deleted.size() == 0) {
if (bsCnt >= 20000) assert("MEM OVERFLOW!");
return bsCnt++;
}
int ret = deleted.top(); deleted.pop();
bs[ret].reset();
return ret;
}

๊ทธ๋ฆฌ๊ณ , vector์˜ unique๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ค‘๋ณต์›์†Œ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ๋Š” sorted vector์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•จ์— ์œ ์˜ํ•˜์ž. ์ฆ‰, unique๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ •์„์ด๋‹ค. ์ด๊ฑธ ๋†“์ณ์„œ 6๋ฒˆ ํ‹€๋ ธ๋‹ค..

sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());

๋งˆ์ง€๋ง‰์œผ๋กœ bitset์˜ ๋Œ€ํ‘œ method๋ฅผ ์ •๋ฆฌํ•œ๋‹ค.

  • reset(): ์ „์ฒด bit๋ฅผ 0์œผ๋กœ
  • set(i): i๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ์ผ ๋‹ค.
  • flip(i): i๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ๋’ค์ง‘๋Š”๋‹ค. (์ธ์ž๊ฐ€ ์—†์œผ๋ฉด ์ „์ฒด๋ฅผ ๋’ค์ง‘๋Š”๋‹ค)
  • count(): 1๋กœ ์„ธํŒ…๋œ ๋…€์„๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • a |= b: a์— b๋ฅผ orํ•ด์„œ ์ €์žฅํ•œ๋‹ค.

Editorial์„ ํ™•์ธํ•ด๋ณด๋ฉด, ๊ณต์ด ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ 2๋ฐฐ ์ด์ƒ์˜ size๋กœ ํ• ๋‹น๋˜๊ฒŒ ๋˜๋ฏ€๋กœ, ํ•œ ์ฟผ๋ฆฌ๊ฐ€ O(logโกN)O(\log N)์— ์ˆ˜ํ–‰์ด ๋˜๋Š” ๊ผด์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ swap์ด๋‚˜ move๋ฅผ ์“ฐ๋ฉด, O(NlogโกN)O(N \log N)์— ํ•ด๊ฒฐ์ด ๋˜๋Š” ๋ชจ์–‘์ด๋‹ค. ์•„๋ž˜๊ฐ€ ์ •ํ•ด. STL๋กœ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๊ณ , ์ƒ์‹œ ์ˆญ๋ฐฐ ํ•ด์•ผํ•œ๋‹ค.

๐Ÿ‘‰ ํŽผ์น˜๊ธฐ
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main() {
int n, q;
cin >> n >> q;
vector<set<int>> st(n);
for (int i = 0; i < n; i++) {
int c;
cin >> c;
st[i].insert(c);
}
while (q--) {
int a, b;
cin >> a >> b;
a--; b--;
if (st[a].size() < st[b].size()) {
for (int i : st[a]) st[b].insert(i);
st[a].clear();
cout << st[b].size() << '\n';
}
else {
for (int i : st[b]) st[a].insert(i);
st[b].clear();
cout << st[a].size() << '\n';
swap(st[a], st[b]);
}
}
}

G

Skip

๐Ÿท๏ธ ์ฃผ์ œ ๋ชฉ๋ก: