Giter Site home page Giter Site logo

atcoder's Introduction

atcoder's People

Contributors

zeikar avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

atcoder's Issues

ARC_084_A / ABC_077_C - Snuke Festival

Problem link

https://atcoder.jp/contests/arc084/tasks/arc084_a

Problem Summary

n๊ฐœ์˜ ๋ฐฐ์—ด a, b, c๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
a[i] < b[j] < c[k] ๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๋ชจ๋“  ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

์ˆœ์„œ ์ƒ๊ด€ ์—†์œผ๋‹ˆ ์ •๋ ฌ๋ถ€ํ„ฐ ํ•ด๋ณด๋ฉด ๋ญ”๊ฐ€ ๋ณด์ธ๋‹ค.
b๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ดํŽด๋ณด์ž. b์˜ ์›์†Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ •ํ–ˆ๋‹ค๋ฉด

b๋ณด๋‹ค ์ž‘์€ a ๋ฐฐ์—ด ์›์†Œ์˜ ๊ฐœ์ˆ˜ X b๋ณด๋‹ค ํฐ c ๋ฐฐ์—ด ์›์†Œ์˜ ๊ฐœ์ˆ˜

๊ฐ€ ํ•ด๋‹น b ์›์†Œ๋ฅผ ๋ฝ‘์•˜์„ ๋•Œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋œ๋‹ค.

๋ชจ๋“  n์— ๋Œ€ํ•ด ๋Œ๋ฆฌ๋ฉด์„œ b์˜ ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ a, c ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์ด๋ถ„ ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

Code

#include <iostream>
#include <algorithm>
using namespace std;

int a[100000];
int b[100000];
int c[100000];

int main() {
	int n;
	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}

	for (int i = 0; i < n; i++)
	{
		cin >> b[i];
	}

	for (int i = 0; i < n; i++)
	{
		cin >> c[i];
	}

	sort(a, a + n);
	sort(b, b + n);
	sort(c, c + n);

	long long ans = 0;

	for (int i = 0; i < n; i++)
	{
		int aIdx = lower_bound(a, a + n, b[i]) - a - 1;
		int cIdx = upper_bound(c, c + n, b[i]) - c;

		if (aIdx < 0 || cIdx >= n)
		{
			continue;
		}

		ans += (long long)(aIdx + 1) * (n - cIdx);
	}

	cout << ans << endl;
}

ABC_219_D - Strange Lunchbox

Problem link

https://atcoder.jp/contests/abc219/tasks/abc219_d

Problem Summary

๋„์‹œ๋ฝ์ด ์žˆ๊ณ  ์ตœ์†Œ ํšŸ์ˆ˜๋กœ x๊ฐœ ์ด์ƒ์˜ ํƒ€์ฝ”์•ผํ‚ค์™€ y๊ฐœ ์ด์ƒ์˜ ํƒ€์ด์•ผํ‚ค๋ฅผ ๊ณ ๋ฅด๋Š” ๋ฌธ์ œ

Solution

๋”ฑ ๋ณด๋‹ˆ dp ๋ƒ„์ƒˆ๊ฐ€ ๋‚œ๋‹ค. ๋ฒ”์œ„๋„ 300์œผ๋กœ ์ž‘์œผ๋‹ˆ ํ•ด๋ณผ๋งŒ ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ.

dp[i][j][k] = i ์ธ๋ฑ์Šค๊นŒ์ง€ ๋„์‹œ๋ฝ ์ค‘์— j ๊ฐœ์˜ ํƒ€์ฝ”์•ผํ‚ค, k ๊ฐœ์˜ ํƒ€์ด์•ผํ‚ค๋ฅผ ๊ณ ๋ฅด๋Š” ์ตœ์†Œ ๊ฐ€์ง€ ์ˆ˜

์œ„์ฒ˜๋Ÿผ dp๋ฅผ ์ •์˜ํ•˜๊ณ  ๋‹ค ๋Œ๋ ค์ฃผ๋ฉด ๋œ๋‹ค.

๋‹จ, j, k ๊ฐ’์ด ๊ณ„์‚ฐ ์ค‘์— 300 ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” x, j ์ค‘์— ์ตœ์†Ÿ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. x ๊ฐ’์ด ๋„˜๋Š” j์˜ ๊ฒฝ์šฐ ์–ด์ฐจํ”ผ ์ƒ๊ด€ ์—†๊ธฐ ๋•Œ๋ฌธ.

Source Code

#include <iostream>
#include <cstring>
using namespace std;

int n, x, y;
int a[300], b[300];
int dp[301][301][301];

int solve(int idx, int cx, int cy) {
	if (cx >= x && cy >= y)
	{
		return 0;
	}
	if (idx >= n)
	{
		return 987654321;
	}
	if (dp[idx][min(cx, x)][min(cy, y)] != -1)
	{
		return dp[idx][min(cx, x)][min(cy, y)];
	}

	int ret = 987654321;
	// pick
	ret = min(ret, solve(idx + 1, cx + a[idx], cy + b[idx]) + 1);

	// not pick
	ret = min(ret, solve(idx + 1, cx, cy));

	return dp[idx][min(cx, x)][min(cy, y)] = ret;
}

int main() {
	memset(dp, -1, sizeof(dp));

	cin >> n >> x >> y;

	for (int i = 0; i < n; i++)
	{
		cin >> a[i] >> b[i];
	}

	int ans = solve(0, 0, 0);

	if (ans == 987654321)
	{
		ans = -1;
	}
	cout << ans << endl;
}

CODEFESTIVAL_2016_QUALA_C - Next Letter

Problem link

https://atcoder.jp/contests/code-festival-2016-quala/tasks/codefestival_2016_qualA_c

Problem Summary

๋ฌธ์ž์—ด๊ณผ k๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. k๋ฒˆ ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.
์—ฐ์‚ฐ: ๋‹ค์Œ ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ, ๋‹จ z๋Š” a๋กœ ๋ณ€ํ•จ.

Solution

์ผ๋‹จ ๊ทธ๋ฆฌ๋”” ์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด

  • ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ตœ์†Œ๊ฐ€ ๋˜๋ ค๋ฉด ์•ž ๋ฌธ์ž๋ฅผ ์ตœ๋Œ€ํ•œ a๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
  • a๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฉด ์•„์˜ˆ ์—ฐ์‚ฐ์„ ์•ˆ ํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค.

์œ„ ๋‘ ๊ทœ์น™์— ๋งž๊ฒŒ ๋ฌธ์ž์—ด์„ ๋Œ๋ฉด์„œ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๋‹จ, ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ๋‚จ์•˜์„ ๊ฒฝ์šฐ ๋งจ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ตœ์†Œ๊ฐ€ ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Source Code

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s;
	int k;
	cin >> s >> k;

	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] == 'a')
		{
			continue;
		}

		int diff = 26 - (s[i] - 'a');
		// possible to change to a
		if (k >= diff)
		{
			s[i] = 'a';
			k -= diff;
		}
	}

	// remains
	s[s.size() - 1] = ((s[s.size() - 1] - 'a') + k % 26) % 26 + 'a';

	cout << s << endl;
}

ABC_228 - TOYOTA SYSTEMS Programming Contest 2021(AtCoder Beginner Contest 228)

Contest Link

https://atcoder.jp/contests/abc228

Solved problems

A, B, C, D

Brief explanations

A, B ๊ฐ„๋‹จ. ๋‹จ, A๋Š” ์ฒ˜์Œ์— ์ดํ•ด๊ฐ€ ์•ˆ๋˜์„œ 1๋ฒˆ ํ‹€๋ฆผ...
C: ์ •๋ ฌ์„ ํ•œ ํ›„ ์ž์‹ ๋ณด๋‹ค 300์  ๋†’์€ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ณ  K๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด Yes ์ถœ๋ ฅ. ๊ฐœ์ˆ˜๋ฅผ ์…€ ๋•Œ upper bound ์ด์šฉ.
D: ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ž๋ฆฌ๋ฅผ map์œผ๋กœ ์˜ˆ์•ฝํ•ด๋‘๊ณ  ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋  ๋•Œ๋งˆ๋‹ค ์ œ๊ฑฐ, ์ž๋ฆฌ๋ฅผ ์ฐพ๋Š” ๊ฑด lower bound ์ด์šฉ. ๋‹จ, n์„ ๋„˜์œผ๋ฉด ๋‹ค์‹œ 0๋ถ€ํ„ฐ ์ฑ„์›Œ์•ผ ํ•˜๋ฏ€๋กœ 2 * n ๋งŒํผ์„ ์ž๋ฆฌ ์˜ˆ์•ฝ์„ ํ•ด๋‘ .

DIVERTA2019_D - DivRem Number

Problem link

https://atcoder.jp/contests/diverta2019/tasks/diverta2019_d

Problem Summary

์ฃผ์–ด์ง„ N์— ๋Œ€ํ•ด ๋‚˜๋ˆˆ ๋ชซ๊ณผ ๋‚˜๋จธ์ง€๊ฐ€ ๊ฐ™๋„๋ก ํ•˜๋Š” m์„ ๋ชจ๋‘ ๊ตฌํ•ด ๋”ํ•˜๋ฉด ๋œ๋‹ค.

Solution

์ˆ˜์‹์„ ์กฐ๊ธˆ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
๋จผ์ € ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” favorite number๋ฅผ m์œผ๋กœ ๋‘๋ฉด

x = N / m = N % m

์ด ์„ฑ๋ฆฝํ•ด์•ผ ๋˜๊ณ , ์–‘์ชฝ์œผ๋กœ ์‹์„ ์ •๋ฆฌํ•˜๋ฉด

N = m * x + x
m = (N - x) / x

์ด ๋œ๋‹ค.

๋‹จ, 1๋ถ€ํ„ฐ ๋ชจ๋“  n๊นŒ์ง€ ํƒ์ƒ‰์€ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋˜๋ฏ€๋กœ sqrt(n) ๊นŒ์ง€๋งŒ ๋Œ๋ ค์ฃผ๋ฉด ๋œ๋‹ค.

Source Code

#include <iostream>
using namespace std;

int main() {
	long long n;
	cin >> n;

	long long ans = 0;

	for (long long x = 1; x * x <= n; x++)
	{
		long long m = (n - x) / x;

		if (m == 0)
		{
			continue;
		}

		if (n / m == n % m)
		{
			ans += m;
		}
	}

	cout << ans << endl;
}

ABC_140_D - Face Produces Unhappiness

Problem link

https://atcoder.jp/contests/abc140/tasks/abc140_d

Problem Summary

์‚ฌ๋žŒ๋“ค์ด L, R ๋ฐฉํ–ฅ์„ ๋ฐ”๋ผ๋ณด๋ฉฐ ์„œ ์žˆ๊ณ , ์„œ๋กœ ๊ฐ™์€ ๋ฐฉํ–ฅ์„ ๋ฐ”๋ผ๋ณด๋ฉด happy์ด๋‹ค.
์ด๋•Œ k ๋ฒˆ์˜ ํšŸ์ˆ˜๋งŒํผ (l, r) ๋ฒ”์œ„์˜ ์‚ฌ๋žŒ๋“ค์˜ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋‹ค.
์ตœ๋Œ€๋กœ happy ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

๋”ฑ ๋ณด๋ฉด ์–ด๋ ค์šด๋ฐ ํฌ์ธํŠธ๋ฅผ ์ž˜ ์•Œ์•„์ฑ„๋ฉด ๊ต‰์žฅํžˆ ์‰ฌ์›Œ์ง€๋Š” ๋ฌธ์ œ.

unhappyํ•œ ์‚ฌ๋žŒ๋“ค์„ ๋’ค์ง‘๊ฒŒ ๋˜๋ฉด happy ํ•˜๊ฒŒ ๋ณ€ํ•˜๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๋Š” 2๋ช…์ด๋‹ค.

์œ„ ์‚ฌ์‹ค์„ ์•Œ๋ฉด ์‰ฝ๊ฒŒ ํ’€๋ฆฐ๋‹ค.

๋จผ์ € ๊ฐ„๋‹จํ•œ ์ฆ๋ช…์€ LLL ... RRR ... LLL ์ด ์žˆ์„ ๋•Œ R ์„ ๋’ค์ง‘์–ด์„œ L๋กœ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋ณด์ž. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด RRR...R ์˜ ๋‚ด๋ถ€์˜ happy๋Š” ๊ทธ๋Œ€๋กœ ์ด๊ณ  LR ... RL ์ฒ˜๋Ÿผ ์„œ๋กœ ๊ฒฝ๊ณ„์— ์žˆ๋Š” unhappy์ธ ์‚ฌ๋žŒ์€ LL....LL๋กœ ๋’ค์ง‘์–ด ์ง€๋ฉด์„œ ์ด 2๋ช…์˜ happy ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.
๋˜ํ•œ, ๋ฐฐ์—ด์˜ ์–‘์ชฝ ๋๋ถ€๋ถ„์„ ๋’ค์ง‘์œผ๋ฉด 1๋ช…๋งŒ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ๊ทธ๋ฆฌ๋”” ํ•˜๊ฒŒ 2๋ช… ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๋’ค์ง‘๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ตœ๋Œ€๋กœ happyํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜๋Š” n-1 ์ด๋ฏ€๋กœ ์ด๋ฅผ ๋„˜์ง€ ์•Š๋„๋ก ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

Source Code

#include <iostream>
#include <string>
using namespace std;

int main() {
	int n, k;
	string s;

	cin >> n >> k >> s;

	int happy = 0;
	for (int i = 1; i < n; i++)
	{
		if (s[i] == s[i - 1])
		{
			happy++;
		}
	}

	cout << min(n - 1, happy + 2 * k) << endl;
}

ABC_223_D - Restricted Permutation

Problem link

https://atcoder.jp/contests/abc223/tasks/abc223_d

Problem Summary

1๋ถ€ํ„ฐ N๊นŒ์ง€ ์ˆœ์—ด ์ค‘์— Ai์˜ ์œ„์น˜ < Bi์˜ ์œ„์น˜๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ์ž‘์€ ์ˆœ์—ด์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

์ž˜ ๋ณด๋‹ˆ ์œ„์ƒ ์ •๋ ฌ ๋ฌธ์ œ์ด๋‹ค.

์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ  ์ •๋‹ต ์‚ฌ์ด์ฆˆ๊ฐ€ n์ด ์•„๋‹ˆ๋ฉด ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ -1์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

Source Code

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

vector<int> edges[200001];
int indegree[200001];

int main() {
	int n, m;

	cin >> n >> m;

	while (m--)
	{
		int a, b;
		cin >> a >> b;

		edges[a].push_back(b);
		++indegree[b];
	}

	priority_queue<int> que;
	queue<int> ans;
	for (int i = 1; i <= n; i++)
	{
		if (indegree[i] == 0)
		{
			que.push(-i);
		}
	}

	while (!que.empty())
	{
		int node = -que.top();
		que.pop();
		ans.push(node);

		for (int i = 0; i < edges[node].size(); i++)
		{
			int next = edges[node][i];

			indegree[next]--;

			if (indegree[next] == 0)
			{
				que.push(-next);
			}
		}
	}

	if (ans.size() != n)
	{
		cout << -1 << endl;
	}
	else
	{
		while (!ans.empty())
		{
			cout << ans.front() << ' ';
			ans.pop();
		}
		cout << endl;
	}
}

Study

๋Œ€ํšŒ๊ฐ€ ์•„๋‹Œ ์Šคํ„ฐ๋”” ์šฉ์œผ๋กœ ํ‘ผ ๋ฌธ์ œ๋“ค ๋ชจ์Œ.

=> https://github.com/cp-study

ABC_216_E - Amusement Park

Problem link

https://atcoder.jp/contests/abc216/tasks/abc216_e

Problem Summary

n๊ฐœ์˜ a ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง€๊ณ  ์ตœ๋Œ€ k๊ฐœ๋ฅผ ๊ณจ๋ผ์„œ ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ๊ณ ๋ฅด๋Š” ๋ฌธ์ œ.
๋‹จ, ํ•œ๋ฒˆ ๊ณ ๋ฅผ ๋•Œ๋งˆ๋‹ค a ๋ฐฐ์—ด์˜ ์›์†Œ์˜ ๊ฐ’์€ 1์”ฉ ๊ฐ์†Œํ•œ๋‹ค.

Solution

๋ญ”๊ฐ€ ์ด๋ถ„ ํƒ์ƒ‰์œผ๋กœ ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™์€๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ์ง€ ์•Š์•˜๋‹ค.

๋จผ์ € k๊ฐœ๋ฅผ ๋„˜์ง€ ์•Š๋Š” ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ณ ๋ฅด๋Š” ์ง€์ ์„ ์ด๋ถ„ ํƒ์ƒ‰์„ ์ด์šฉํ•ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
k ๊ฐœ์—์„œ ๋‚จ์€ ๊ฐœ์ˆ˜๋งŒํผ ๋” ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฑด ๋”ฐ๋กœ ํ•œ ๋ฒˆ ๋” ํƒ์ƒ‰ํ•ด์„œ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

์˜ˆ์ œ1๋กœ ๋ณด๋ฉด ์ด๋ถ„ ํƒ์ƒ‰์œผ๋กœ k๊ฐœ๋ฅผ ๋„˜์ง€ ์•Š๊ฒŒ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ธ 100์„ ๊ตฌํ•จ (4๊ฐœ ์„ ํƒ ๊ฐ€๋Šฅ)
k ๊ฐ€ 5์ด๋ฏ€๋กœ 1๊ฐœ๋ฅผ ๋” ์ถ”๊ฐ€๋กœ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฑด ์•„๋ž˜์ชฝ for ๋ฌธ์œผ๋กœ cnt๋ฅผ ๊ตฌํ•ด k ์—์„œ ๋บ€ ๋งŒํผ 99 ๋ฅผ ๊ณฑํ•ด์„œ ๋”ํ•˜๋„๋ก ํ–ˆ๋‹ค.

Source Code

#include <iostream>
using namespace std;

long long a[100000];

int main() {
	long long n, k;
	cin >> n >> k;

	long long high = 0;
	long long low = 0;
	long long ans = 0;

	for (int i = 0; i < n; i++)
	{
		cin >> a[i];

		high = max(high, a[i]);
	}

	while (low <= high)
	{
		long long mid = (high + low) / 2;
		long long cnt = 0;

		for (int i = 0; i < n; i++)
		{
			if (a[i] < mid)
			{
				continue;
			}

			long long n = a[i] - mid + 1;
			cnt += n;
		}

		if (cnt > k)
		{
			low = mid + 1;
		}
		else
		{
			high = mid - 1;
		}
	}

	long long cnt = 0;
	for (int i = 0; i < n; i++)
	{
		if (a[i] < low)
		{
			continue;
		}

		long long n = a[i] - low + 1;
		cnt += n;
		ans += n * (a[i] + low) / 2;
	}
	ans += max((k - cnt) * (low - 1), 0LL);

	cout << ans << endl;
}

ARC_061_A / ABC_045_C - Many Formulas

Problem link

https://atcoder.jp/contests/arc061/tasks/arc061_a

Problem Summary

๋ฌธ์ž์—ด s์˜ ๋ฌธ์ž ์‚ฌ์ด์— + ๋ฅผ ๋„ฃ์–ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ฅผ ์ „๋ถ€ ๋”ํ•˜๋Š” ๋ฌธ์ œ.

Solution

๊ทธ๋ƒฅ ๋ง ๊ทธ๋Œ€๋กœ +๋ฅผ ๋ฌธ์ž ์‚ฌ์ด์— ๋‹ค ํ•œ ๋ฒˆ ์”ฉ ๋„ฃ์–ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ฅผ ๋”ํ•˜๋ฉด ๋œ๋‹ค.
๋น„ํŠธ ์—ฐ์‚ฐ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ€๋Šฅ.

Source Code

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s;
	cin >> s;

	long long ans = 0;

	for (int i = 0; i < (1 << (s.length() - 1)); i++)
	{
		long long num = 0;

		for (int j = 0; j < s.length(); j++)
		{
			num *= 10;
			num += s[j] - '0';

			if ((1 << j) & i)
			{
				ans += num;
				num = 0;
			}
		}

		ans += num;
	}

	cout << ans << endl;
}

ABC_192_E - Train

Problem link

https://atcoder.jp/contests/abc192/tasks/abc192_e

Problem Summary

๋„์‹œ๋“ค์ด ์žˆ๊ณ  ์ฒ ๋„์˜ ์ •๋ณด (์†Œ์š” ์‹œ๊ฐ„, ์ถœ๋ฐœํ•˜๋Š” ์‹œ๊ฐ)์ด ์ฃผ์–ด์งˆ ๋•Œ x ์—์„œ y๋กœ ๊ฐ€๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

์ „ํ˜•์ ์ธ ๋‹ค์ต์ŠคํŠธ๋ผ ๋ฌธ์ œ์ด๋‹ค.
๋‹จ, ๊ธฐ์ฐจ๊ฐ€ ki ์˜ ๋ฐฐ์ˆ˜๋กœ๋งŒ ์ถœ๋ฐœํ•˜๋ฏ€๋กœ ์ด๋ฅผ ๋ณด์ •ํ•˜๊ธฐ ์œ„ํ•ด ki ๋ฐฐ์ˆ˜ ๋ฏธ๋งŒ์ด๋ฉด ki ๋ฐฐ์ˆ˜๋กœ ๋งŒ๋“ค๊ณ  ti๋ฅผ ๋”ํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

Source Code

#include <iostream>
#include <vector>
#include <queue>
#include <tuple>
#include <climits>
using namespace std;

class Edge
{
public:
	Edge(int dest, int t, int k) {
		this->dest = dest;
		this->t = t;
		this->k = k;
	}

	int dest;
	int t;
	int k;
};

vector<Edge> edges[100001];
long long distances[100001];

int main() {
	int n, m, x, y;
	cin >> n >> m >> x >> y;

	for (int i = 0; i <= n; i++)
	{
		distances[i] = LLONG_MAX;
	}

	while (m--)
	{
		int a, b, t, k;
		cin >> a >> b >> t >> k;

		edges[a].push_back(Edge(b, t, k));
		edges[b].push_back(Edge(a, t, k));
	}

	priority_queue<tuple<long long, int> > pq;
	pq.push(make_tuple(0, x));
	distances[x] = 0;

	while (!pq.empty())
	{
		auto current = pq.top();
		pq.pop();

		long long currentTime = -get<0>(current);
		int currentCity = get<1>(current);

		if (distances[currentCity] < currentTime)
		{
			continue;
		}

		for (int i = 0; i < edges[currentCity].size(); i++)
		{
			auto nextEdge = edges[currentCity][i];
			long long nextTime;

			if (currentTime % nextEdge.k == 0)
			{
				nextTime = currentTime + nextEdge.t;
			}
			else
			{
				nextTime = ((currentTime / nextEdge.k) + 1) * nextEdge.k + nextEdge.t;
			}

			if (distances[nextEdge.dest] <= nextTime)
			{
				continue;
			}
			distances[nextEdge.dest] = nextTime;

			pq.push(make_tuple(-nextTime, nextEdge.dest));
		}
	}

	if (distances[y] == LLONG_MAX)
	{
		cout << -1 << endl;
	}
	else
	{
		cout << distances[y] << endl;
	}
}

ABC_115_D - Christmas

Problem link

https://atcoder.jp/contests/abc115/tasks/abc115_d

Problem Summary

๋ฒ„๊ฑฐ๋ฅผ ์ผ์ • ๊ทœ์น™์œผ๋กœ ์Œ“์„ ์ˆ˜ ์žˆ๋‹ค.
ํ•ด๋‹น ๋ ˆ๋ฒจ์˜ ๋ฒ„๊ฑฐ์˜ x์ธต ๊นŒ์ง€ ์ค‘์— ํŒจํ‹ฐ๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

์ผ์ • ๊ทœ์น™:

  • ๋ ˆ๋ฒจ 0์˜ ๋ฒ„๊ฑฐ๋Š” ํŒจํ‹ฐ 1๊ฐœ์ด๋‹ค.
  • ๋ ˆ๋ฒจ L์˜ ๋ฒ„๊ฑฐ๋Š” ๋ฒˆ + ๋ ˆ๋ฒจ L-1 ๋ฒ„๊ฑฐ + ํŒจํ‹ฐ + ๋ ˆ๋ฒจ L-1 ๋ฒ„๊ฑฐ + ๋ฒˆ์ด๋‹ค.

Solution

๋ถ„ํ•  ์ •๋ณต์œผ๋กœ ๋ ˆ๋ฒจ L์˜ ๋ฒ„๊ฑฐ์˜ ํŒจํ‹ฐ ์ˆ˜๋ฅผ ๋นจ๋ฆฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฒˆ + ๋ ˆ๋ฒจ L-1 ๋ฒ„๊ฑฐ + ํŒจํ‹ฐ + ๋ ˆ๋ฒจ L-1 ๋ฒ„๊ฑฐ + ๋ฒˆ

์ค‘๊ฐ„์˜ ํŒจํ‹ฐ๋ฅผ ๊ธฐ์ ์œผ๋กœ ๋ฐ˜์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ณ ,
x๊ฐ€ ๋ ˆ๋ฒจ L-1 ๋ฒ„๊ฑฐ์˜ ์ธต์ˆ˜ + 1 ๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋ ˆ๋ฒจ L-1 ๋ฒ„๊ฑฐ์˜ ํŒจํ‹ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ์‹์œผ๋กœ ์žฌ๊ท€์ ์œผ๋กœ ๋‚˜๋ˆ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

๋Œ€์‹  ํŠน์ • ๋ ˆ๋ฒจ์˜ ์ „์ฒด ๋ฒ„๊ฑฐ ์ธต ์ˆ˜ ๋ฐ ํŒจํ‹ฐ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋นจ๋ฆฌ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ์ „์ฒ˜๋ฆฌ๋กœ ์ „๋ถ€ ๊ตฌํ•ด๋†“์•˜๋‹ค.

Source Code

#include <iostream>
using namespace std;

long long totalLength[51];
long long pattyLength[51];

void getLength(int level) {
	if (level == 0)
	{
		totalLength[level] = 1;
		pattyLength[level] = 1;
		return;
	}

	getLength(level - 1);

	totalLength[level] = totalLength[level - 1] * 2 + 3;
	pattyLength[level] = pattyLength[level - 1] * 2 + 1;
}

long long solve(int level, long long x) {
	if (level == 0)
	{
		return 1;
	}

	if (x <= 1)
	{
		return 0;
	}
	else if (x <= 1 + totalLength[level - 1])
	{
		return solve(level - 1, x - 1);
	}
	else if (x == 1 + totalLength[level - 1] + 1)
	{
		return pattyLength[level - 1] + 1;
	}
	else if (x < totalLength[level])
	{
		return pattyLength[level - 1] + 1 + solve(level - 1, x - totalLength[level - 1] - 2);
	}
	else
	{
		return pattyLength[level];
	}
}

int main() {
	int n;
	long long x;

	cin >> n >> x;

	getLength(n);

	cout << solve(n, x) << endl;
}

ABC_226 - AtCoder Beginner Contest 226

Contest Link

https://atcoder.jp/contests/abc226

Solved problems

A, B, C, D

Brief explanations

A, B: ๊ฐ„๋‹จ
C: ๊ทธ๋ƒฅ dfs ํƒ์ƒ‰ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
D: x, y ๋ชจ๋“  ์Œ์— ๋Œ€ํ•ด ์ขŒํ‘œ์˜ ์ฐจ์ด (๊ธฐ์šธ๊ธฐ)๋ฅผ gcd๋กœ ๋‚˜๋ˆ ์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋ฉด์„œ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.

ABC_191_C - Digital Graffiti

Problem link

https://atcoder.jp/contests/abc191/tasks/abc191_c

Problem Summary

๊ทธ๋ฆฌ๋“œ์— #, .์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์งˆ ๋•Œ ์ด ๋„ํ˜•์ด ๋ช‡๊ฐํ˜•์ธ์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

๋ฌธ์ œ ์„ค๋ช…, ์˜ˆ์ œ๊ฐ€ ๋ถˆ์นœ์ ˆํ•œ๋ฐ... ์˜ค๋ชฉ ๋‹ค๊ฐํ˜•๋„ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์–ด์จŒ๋“  ๋‹ค๊ฐํ˜•์ด ๋ช‡๊ฐํ˜•์ธ์ง€ ๊ตฌํ•˜๋ ค๋ฉด ๊ผญ์ง€์ ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
์ด๊ฑด ์—๋””ํ† ๋ฆฌ์–ผ์„ ์ฐธ๊ณ ํ–ˆ๋Š”๋ฐ ์ƒํ•˜์ขŒ์šฐ 2์นธ์”ฉ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ ๊ฒ€์€์ƒ‰ ๋ธ”๋ก (#)์ด 1๊ฐœ ๋˜๋Š” 3๊ฐœ์ด๋ฉด ๊ผญ์ง€์ ์ด๋‹ค.

์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ์ข€ ์ดํ•ด๊ฐ€ ๊ฐ€๊ธด ํ•˜๋Š”๋ฐ

.....
.###.
.###.
.###.
.....

์ด๊ฑด 4๊ฐํ˜•์ด๊ณ 

.....
.#.#.
.###.
.###.
.....

์ด๊ฑด 8๊ฐํ˜•์ด ๋œ๋‹ค

Source Code

#include <iostream>
#include <string>
using namespace std;

int main() {
	int h, w;
	cin >> h >> w;

	string grid[10];

	for (int i = 0; i < h; i++)
	{
		cin >> grid[i];
	}

	int ans = 0;

	for (int i = 0; i < h - 1; i++)
	{
		for (int j = 0; j < w - 1; j++)
		{
			int cnt = 0;

			for (int a = 0; a < 2; a++)
			{
				for (int b = 0; b < 2; b++)
				{
					cnt += (grid[i + a][j + b] == '#');
				}
			}

			if (cnt == 1 || cnt == 3)
			{
				ans++;
			}
		}
	}

	cout << ans << endl;
}

ARC_097_A / ABC_097_C - K-th Substring

Problem link

https://atcoder.jp/contests/arc097/tasks/arc097_a

Problem Summary

๋ฌธ์ž์—ด s ์˜ ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ค‘์—์„œ k ๋ฒˆ์งธ๋กœ ์ž‘์€ ๋ฌธ์ž์—ด์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

์ผ๋‹จ ํžŒํŠธ๋Š” k๊ฐ€ ์•„์ฃผ ์ž‘๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. (์ตœ๋Œ€ 5)

s ์˜ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€ 5000์ด๋ฏ€๋กœ s์˜ ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์€ n^2์ด ๋˜๊ณ  ์ด๋ก ์ƒ ์‹œ๊ฐ„ ์•ˆ์— ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋งต์„ ์‚ฌ์šฉํ•˜๊ณ , ๊ตฌํ•œ ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋งต์— ๋„ฃ์œผ๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

์ฒ˜์Œ ์ œ์ถœํ•œ ๋‹ต์€ ๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ค‘ k ๋ฒˆ์งธ๋ฅผ ๊ตฌํ–ˆ๋Š”๋ฐ ๋‹น์—ฐํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ. ์•ฝ๊ฐ„์˜ ์ตœ์ ํ™”๋ฅผ ํ•ด์„œ ๋งต์˜ ํฌ๊ธฐ๋ฅผ ์ตœ๋Œ€ k๊ฐœ ๊นŒ์ง€๋งŒ ์œ ์ง€ํ–ˆ๋”๋‹ˆ 1์ดˆ์ •๋„๋กœ ํ†ต๊ณผ.

์—ฌ๊ธฐ์„œ ๋” ์ตœ์ ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ k ๋ฒˆ์งธ์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ k์—ฌ์•ผ๋งŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.
๊ธธ์ด๊ฐ€ k๊ฐ€ ๋„˜์œผ๋ฉด ๊ทธ๋ณด๋‹ค ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด(prefix)๋ณด๋‹ค ํฌ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (aaaaaa > aaaaa) ์ด๋‹ค.

Source Code

#include <iostream>
#include <string>
#include <algorithm>
#include <map>
using namespace std;

int main() {
	string s;
	int k;

	cin >> s >> k;

	map<string, bool> substrs;
	for (int i = 0; i < s.length(); i++)
	{
		for (int j = i + 1; j <= min(i + k, (int)s.length()); j++)
		{
			substrs[s.substr(i, j - i)] = true;

			if (substrs.size() > k)
			{
				substrs.erase(--substrs.end());
			}
		}
	}

	for (auto const& str : substrs)
	{
		k--;

		if (k == 0)
		{
			cout << str.first << endl;
			break;
		}
	}
}

ABC_099_C - Strange Bank

Problem link

https://atcoder.jp/contests/abc099/tasks/abc099_c

Problem Summary

ํ•œ ๋ฒˆ์— ์ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์•ก์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ณ , ์ฃผ์–ด์ง„ ๋ˆ์„ ์ตœ์†Œ ๋ช‡ ๋ฒˆ๋งŒ์— ์ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

์ „ํ˜•์ ์ธ DP ๋ฌธ์ œ.
๊ฐ„๋‹จํ•˜๊ฒŒ

dp[n] = n์„ ์ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ํšŸ์ˆ˜.

๋กœ ์ •์˜ํ•˜๊ณ  ๋Œ๋ ค์ฃผ๋ฉด ๋œ๋‹ค.

์—๋””ํ† ๋ฆฌ์–ผ ๋ณด๋‹ˆ ๊ทธ๋ฆฌ๋””๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

Source Code

#include <iostream>
#include <cstring>
using namespace std;

int dp[100001];

int main() {
	int N;
	cin >> N;

	for (int i = 1; i <= N; i++)
	{
		dp[i] = 987654321;

		for (int j = 6; j <= i; j *= 6)
		{
			dp[i] = min(dp[i], dp[i - j] + 1);
		}
		for (int j = 9; j <= i; j *= 9)
		{
			dp[i] = min(dp[i], dp[i - j] + 1);
		}

		dp[i] = min(dp[i], dp[i - 1] + 1);
	}

	cout << dp[N] << endl;
}

ABC_166_E - This Message Will Self-Destruct in 5s

Problem link

https://atcoder.jp/contests/abc166/tasks/abc166_e

Problem Summary

๋ฐฐ์—ด์—์„œ ๋‘ ์›์†Œ๋ฅผ ์„ ํƒํ•  ๋•Œ ๊ฐ’์˜ ํ•ฉ์ด ์ธ๋ฑ์Šค์˜ ์ฐจ์ด์˜ ์ ˆ๋Œ“๊ฐ’์ด ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

๋ญ”๊ฐ€ ์ˆ˜ํ•™์ ์ธ ๊ฒƒ์ด ๋ณด์ผ ๋“ฏ ํ•ด์„œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ดค๋‹ค.

Ai + Aj == | j - i |

j > i๋กœ ๊ณ ์ •ํ•˜๊ณ  ์ ˆ๋Œ“๊ฐ’์„ ํ’€๋ฉด j - Aj = i + Ai ๊ฐ€ ๋˜๋Š”๋ฐ i + Ai๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ ๊ณ„์† ๋”ํ•ด์ฃผ๋ฉด์„œ j์— ๋Œ€ํ•ด j - Aj ๊ฐœ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ฐธ๊ณ : https://codeforces.com/blog/entry/76833?#comment-614685

Source Code

#include <iostream>
#include <map>
using namespace std;

int a[200000];
map<int, int> diff;

int main() {
	int n;
	cin >> n;

	long long res = 0;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];

		res += diff[i - a[i]];
		diff[a[i] + i]++;
	}


	cout << res << endl;
}

ABC_231 - Panasonic Programming Contest 2021(AtCoder Beginner Contest 231)

Contest Link

https://atcoder.jp/contests/abc231

Solved problems

A, B, C, D

Brief explanations

A, B, C: ๊ฐ„๋‹จ
D: ๊ฒฐ๋ก ๋งŒ ๋งํ•˜๋ฉด ์—ฐ๊ฒฐ๋œ ๊ณณ์ด 3๊ฐœ ์ด์ƒ์ด๊ฑฐ๋‚˜ ์‚ฌ์ดํด์ด ์žˆ์„ ๊ฒฝ์šฐ No๊ฐ€ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•œ๋‹ค.
๋ถˆ์นœ์ ˆํ•œ ์˜ˆ์ œ๋กœ ์ง์ ‘ ์˜ˆ์™ธ ์ผ€์ด์Šค๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
์—„์ฒญ๋‚œ ์‚ฝ์งˆ.. ๋์— dsu๋กœ ํ’€๊ธด ํ’€์—ˆ๋‹ค.

ARC_110_C - Exoswap

Problem link

https://atcoder.jp/contests/arc110/tasks/arc110_c

Problem Summary

๋ฐฐ์—ด์ด ์ฃผ์–ด์ง€๊ณ , ์ž„์˜์˜ ์ˆœ์—ด P์˜ ์ˆœ์„œ๋Œ€๋กœ swap์„ ํ–ˆ์„ ๋•Œ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ.

Solution

๊ทธ๋ฆฌ๋””ํ•˜๊ฒŒ ์ ‘๊ทผํ•ด๋ณด์ž.
๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•ด์•ผ ๋˜๋ฏ€๋กœ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.
์˜ค๋ฅธ์ชฝ์œผ๋กœ swap์ด ๊ฐ€๋Šฅํ•˜๋ฉด swap์„ ํ•ด์ฃผ๊ณ  ์ž๊ธฐ ์œ„์น˜๊นŒ์ง€ ๊ณ„์† swap์„ ํ•œ๋‹ค. ์ผ์ข…์˜ ๋ฒ„๋ธ” ์ •๋ ฌ ๋Š๋‚Œ.

์ด๋•Œ P๊ฐ€ ์ˆœ์—ด์ด๋ฏ€๋กœ visited๋ฅผ ๋„ฃ์–ด ํ•œ๋ฒˆ ๋‚˜์˜จ ์ˆ˜๋Š” ๋” ๋‚˜์˜ค์ง€ ์•Š๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.

Source Code

#include <iostream>
#include <algorithm>
#include <utility>
#include <vector>
using namespace std;

int a[200001];
pair<int, int> map[200001];
bool visited[200001];

int main() {
	int n;
	cin >> n;


	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
		map[i].first = a[i];
		map[i].second = i;
	}

	sort(map, map + n);

	vector<int> ans;

	for (int i = n - 1; i > 0; i--)
	{
		int val = map[i].first;
		int pos = map[i].second;

		// move
		if (pos < val - 1 && !visited[pos])
		{
			// swap
			int target = a[pos + 1];

			map[i].second = map[i - (val - target)].second;
			map[i - (val - target)].second = pos;

			a[pos] = target;
			a[pos + 1] = val;

			ans.push_back(pos);
			visited[pos] = true;
			i++;
		}
		else if (pos == val - 1)
		{
			continue;
		}
		else
		{
			ans.clear();
			break;
		}
	}

	if (ans.size() != n - 1)
	{
		cout << -1 << endl;
	}
	else
	{
		for (int i = 0; i < ans.size(); i++)
		{
			cout << ans[i] + 1 << endl;
		}
	}
}

AGC_034_B - ABC

Problem link

https://atcoder.jp/contests/agc034/tasks/agc034_b

Problem Summary

์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ABC๋ฅผ BCA๋กœ ์ตœ๋Œ€ ๋ช‡ ๋ฒˆ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ.

Solution

์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ์ง€ ์•Š์€๋ฐ ๋ช‡ ๊ฐ€์ง€ ํŠน์ง•์„ ์จ๋ณด์ž.

A, BC๋Š” ๋ฉ์–ด๋ฆฌ๋กœ ์›€์ง์ด๊ณ  ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์€ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.
=> ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์ด ๋‚˜์˜ค๋ฉด ๋” ์ด์ƒ ๋ณ€ํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
A, BC๋“ค์ด ์ ์ ˆํžˆ ๋งŒ๋‚ฌ์„ ๋•Œ ๋ชจ๋“  ๋ณ€ํ™˜์ด ๋๋‚˜๋ฉด A๋Š” ๋งจ ๋’ค๋กœ ์ด๋™ํ•œ๋‹ค. (AABCBCBC => BCBCBCAA)
=> BC๊ฐ€ ๋‚˜์˜ค๋ฉด ๊ทธ ์ „์˜ A ๊ฐœ์ˆ˜๋งŒํผ ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•˜๋‹ค.

A ๊ฐœ์ˆ˜๋ฅผ ๋ˆ„์ ์œผ๋กœ ์นด์šดํŠธ ํ•ด์ฃผ๋ฉด์„œ BC๋ฅผ ๋งŒ๋‚˜๋ฉด A ๊ฐœ์ˆ˜๋ฅผ ์ •๋‹ต์— ๊ณ„์† ๋”ํ•ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

Source Code

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s;
	cin >> s;

	// dummy
	s += "F";

	long long ans = 0;
	long long aCount = 0;

	for (int i = 0; i < s.length(); i++)
	{
		if (s[i] == 'A')
		{
			aCount++;
		}
		else if (s.substr(i, 2) == "BC")
		{
			ans += aCount;
			i++;
		}
		else
		{
			aCount = 0;
		}
	}

	cout << ans << endl;
}

ARC_100_A / ABC_102_C - Linear Approximation

Problem link

https://atcoder.jp/contests/arc100/tasks/arc100_a

Problem Summary

N ๊ฐœ์˜ a ๋ฐฐ์—ด์—์„œ ์ ๋‹นํ•œ b ๊ฐ’์„ ๊ตฌํ•ด์„œ ์•„๋ž˜ ์‹์„ ์ตœ์†Œ๋กœ ๋งŒ๋“œ๋Š” b ๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ.
image

Solution

๋จผ์ € ์ž๊ธฐ ์ธ๋ฑ์Šค + 1๋งŒํผ ๋นผ๊ณ  ์‹œ์ž‘ํ•˜์ž.
๊ทธ๋Ÿฌ๋ฉด | a[i] - b | ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜๋Š”๋ฐ..
์ด๊ฑด ์ค‘์•™๊ฐ’์„ ์“ฐ๋ฉด ๋œ๋‹ค.

์ž์„ธํ•œ ์ฆ๋ช…์€ https://drken1215.hatenablog.com/entry/2019/06/15/114700 ์ฐธ๊ณ .

a[i]๋ฅผ ์ •๋ ฌํ•œ ๋‹ค์Œ ์ค‘์•™๊ฐ’์œผ๋กœ b๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ •๋‹ต์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.
์œ„ ์ค‘์•™๊ฐ’์„ ๊ณจ๋ผ์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ชจ๋ฅด๋ฉด ์‰ฝ์ง€ ์•Š์€ ๋ฌธ์ œ.

Source Code

#include <iostream>
#include <algorithm>
using namespace std;

int a[200000];

int main() {
	int n;
	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> a[i];

		a[i] -= (i + 1);
	}

	sort(a, a + n);

	int median = a[(n - 1) / 2];

	long long ans = 0;
	for (int i = 0; i < n; i++)
	{
		ans += abs(a[i] - median);
	}

	cout << ans << endl;
}

TENKA1_2018_C - Align

Problem link

https://atcoder.jp/contests/tenka1-2018-beginner/tasks/tenka1_2018_c

Problem Summary

์ ๋‹นํžˆ N๊ฐœ์˜ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ด์„œ ์–‘ ์˜† ์›์†Œ์˜ ์ฐจ์ด์˜ ์ ˆ๋Œ€๊ฐ’์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

๋จผ์ € ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ตœ๋Œ€๊ฐ€ ๋ ์ง€ ๋Œ€์ถฉ ์ƒ๊ฐํ•ด๋ณด๋ฉด ํฐ ๊ฐ’, ์ž‘์€ ๊ฐ’์ด ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ๋‚˜์™€์•ผ ํ•œ๋‹ค.

์•„๋ž˜๋ถ€ํ„ด ์—๋””ํ† ๋ฆฌ์–ผ์„ ์ฐธ๊ณ ํ•จ.

image

์˜ˆ์‹œ๋กœ ํ™€์ˆ˜ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ ํฐ ๊ฐ’๋“ค, ์ง์ˆ˜ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ ์ž‘์€ ๊ฐ’๋“ค์ด๋ผ๊ณ  ๋†“์œผ๋ฉด, ์ ˆ๋Œ€๊ฐ’์„ ํ•œ ๊ฒฐ๊ณผ๋Š” (ํฐ ๊ฐ’ - ์ž‘์€ ๊ฐ’)์ด ๋œ๋‹ค.

n = 5์ผ ๋•Œ,

(p1 โˆ’ p2) + (p3 โˆ’ p2) + (p3 โˆ’ p4) + (p5 โˆ’ p4) = (+1) โˆ— p1 + (โˆ’2) โˆ— p2 + (+2) โˆ— p3 + (โˆ’2) โˆ— p4 + (+1) โˆ— p5.

์ด๋Ÿฐ ์‹์ด ๋˜๊ณ , ๊ณ„์ˆ˜๊ฐ€ ํฐ ์ˆœ์„œ๋Œ€๋กœ ํฐ ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ์ตœ๋Œ“๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์ง์ˆ˜ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ ํฐ ๊ฐ’์ผ ๋•Œ๋Š”

(p2 โˆ’ p1) + (p2 โˆ’ p3) + (p4 โˆ’ p3) + (p4 โˆ’ p5) = (-1) โˆ— p1 + (+2) โˆ— p2 + (-2) โˆ— p3 + (+2) โˆ— p4 + (-1) โˆ— p5.

์ด๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํฐ ๊ณ„์ˆ˜๋ถ€ํ„ฐ ํฐ ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
์ •๋‹ต์€ ์œ„ ๋‘ ๊ฐ€์ง€ ์ค‘ ํฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์œ„ ์˜ˆ์‹œ๋Š” n์ด ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ๊ณ  ์ง์ˆ˜์ธ ๊ฒฝ์šฐ๋Š” ํ•œ๋ฒˆ๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

Source Code

#include <iostream>
#include <algorithm>
using namespace std;

long long a[100000];

int main() {
	int n;
	cin >> n;

	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}

	sort(a, a + n);

	long long ans = 0;

	if (n % 2 == 0)
	{
		for (int i = 0; i < n / 2; i++)
		{
			ans -= 2 * a[i];
		}
		for (int i = n / 2; i < n; i++)
		{
			ans += 2 * a[i];
		}
		ans -= a[n / 2];
		ans += a[n / 2 - 1];
	}
	else
	{
		long long oddBig = 0, evenBig = 0;

		for (int i = 0; i < n / 2; i++)
		{
			oddBig -= 2 * a[i];
		}
		for (int i = n / 2; i < n; i++)
		{
			oddBig += 2 * a[i];
		}
		oddBig -= a[n / 2];
		oddBig -= a[n / 2 + 1];


		for (int i = 0; i <= n / 2; i++)
		{
			evenBig -= 2 * a[i];
		}
		for (int i = n / 2 + 1; i < n; i++)
		{
			evenBig += 2 * a[i];
		}
		evenBig += a[n / 2];
		evenBig += a[n / 2 - 1];

		ans = max(oddBig, evenBig);
	}


	cout << ans << endl;
}

ABC_230_D - Destroyer Takahashi

Problem link

https://atcoder.jp/contests/abc230/tasks/abc230_d

Problem Summary

๋ชจ๋“  ๋ฒฝ์„ ๋ถ€์ˆ˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œ ๋ช‡ ๋ฒˆ ํŽ€์น˜๋ฅผ ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

๋ชจ๋“  ๋ฒฝ์„ ๋ถ€์ˆด์•ผ ํ•˜๋ฏ€๋กœ ์ •๋ ฌ ํ›„ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ญ‰ ๋‚˜๊ฐ€๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
๊ทผ๋ฐ ์ด๊ฒŒ ์ƒ๊ฐ๋ณด๋‹ค ์•ˆ๋ผ์„œ... ๋Œ€ํšŒ ์ค‘์— ๊ฒฐ๊ตญ ๋ชป ํ’€์—ˆ๋‹ค

์—๋””ํ† ๋ฆฌ์–ผ์„ ์ฐธ๊ณ ํ•ด์„œ ์žฌ์ž‘์„ฑ.

์ผ๋‹จ ์ •๋ ฌ์€ ๋งž๋Š”๋ฐ ์˜ค๋ฅธ์ชฝ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค. ํ•ด๋‹น ๋ฒฝ์„ ์ œ๊ฑฐํ•  ๋•Œ ์ตœ๋Œ€ํ•œ ์˜ค๋ฅธ์ชฝ์„ ์ œ๊ฑฐํ•ด์•ผ ๋‹ค๋ฅธ ๋ฒฝ๋„ ๊ฐ™์ด ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์ œ๊ฑฐํ•˜๋Š” ๋ฒฝ์€ ์™ผ์ชฝ ์ขŒํ‘œ๊ฐ€ ์ œ๊ฑฐํ•  ์ขŒํ‘œ + d - 1 ์ด๋‚ด์ด๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค.
์ด ์ขŒํ‘œ๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด ํ•œ๋ฒˆ์— ๋ถ€์ˆ  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋‹ค์‹œ ์˜ค๋ฅธ์ชฝ ์ขŒํ‘œ์—์„œ ํŽ€์น˜๋ฅผ ๋‚ ๋ ค์•ผ ํ•œ๋‹ค.

Source Code

#include <iostream>
#include <algorithm>
#include <utility>
#include <queue>
#include <vector>
using namespace std;

int main() {
	int n, d;
	cin >> n >> d;

	vector< pair<int, int> > walls;

	for (int i = 1; i <= n; i++)
	{
		int l, r;
		cin >> l >> r;

		walls.push_back(make_pair(r, l));
	}

	sort(walls.begin(), walls.end());

	int ans = 0, x = -1987654321;
	for (int i = 0; i < walls.size(); i++)
	{
		int l = walls[i].second;
		int r = walls[i].first;

		if (l > x + d - 1)
		{
			ans++;

			x = r;
		}
	}

	cout << ans << endl;
}

ABC_129_D - Lamp

Problem link

https://atcoder.jp/contests/abc129/tasks/abc129_d

Problem Summary

H * W ํฌ๊ธฐ์˜ ๊ทธ๋ฆฌ๋“œ๊ฐ€ ์žˆ๊ณ  ๋นˆ ์นธ์— ๋žจํ”„๋ฅผ ๋†“์„ ์ˆ˜ ์žˆ๋‹ค.
๋žจํ”„๋Š” ์žฅ์• ๋ฌผ์„ ๋„˜์„ ์ˆ˜ ์—†๊ณ , ์ƒํ•˜์ขŒ์šฐ๋ฅผ ๋ฐํž ์ˆ˜ ์žˆ๋‹ค.
๋žจํ”„๊ฐ€ ๋ฐํž ์ˆ˜ ์žˆ๋Š” ์นธ์˜ ์ตœ๋Œ€ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์™„์ „ ํƒ์ƒ‰ํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๋‹ค. (๋ชจ๋“  ์ ์— ๋žจํ”„๋ฅผ ๋„ฃ์–ด๋ณด๊ณ  ์นธ ์ˆ˜๋ฅผ ๊ณ„์‚ฐ)
๋น›์ด ๋น„์ถœ ์ˆ˜ ์žˆ๋Š” ์นธ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์นธ ๋ณ„๋กœ ์—ฐ์†ํ•œ ์นธ ์ˆ˜๋ฅผ ์ €์žฅํ•ด๋‘๋ฉด ๋œ๋‹ค.
์ƒํ•˜๋กœ ์—ฐ์†ํ•œ ์นธ์˜ ๊ฐœ์ˆ˜, ์ขŒ์šฐ๋กœ ์—ฐ์†ํ•œ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด์„œ ๋„ฃ์–ด๋‘” ํ›„ ๋งˆ์ง€๋ง‰์—” ๋‘ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ์ •๋‹ต์ด๋‹ค.

Source Code

#include <iostream>
#include <string>
using namespace std;

string grid[2000];
int consecutiveX[2000][2000];
int consecutiveY[2000][2000];

int main() {
	int H, W;

	cin >> H >> W;

	for (int i = 0; i < H; i++)
	{
		cin >> grid[i];
	}

	int ans = 0;
	int cnt = 0;

	for (int i = 0; i < H; i++)
	{
		int startX = i, startY = 0;

		for (int j = 0; j < W; j++)
		{
			if (grid[i][j] == '.')
			{
				++cnt;
			}
			else
			{
				for (int k = startY; k < j; k++)
				{
					consecutiveX[startX][k] = cnt;
				}

				startY = j + 1;
				cnt = 0;
			}
		}

		for (int k = startY; k < W; k++)
		{
			consecutiveX[startX][k] = cnt;
		}

		cnt = 0;
	}

	for (int j = 0; j < W; j++)
	{
		int startX = 0, startY = j;

		for (int i = 0; i < H; i++)
		{
			if (grid[i][j] == '.')
			{
				++cnt;
			}
			else
			{
				for (int k = startX; k < i; k++)
				{
					consecutiveY[k][startY] = cnt;
				}

				startX = i + 1;
				cnt = 0;
			}
		}

		for (int k = startX; k < H; k++)
		{
			consecutiveY[k][startY] = cnt;
		}

		cnt = 0;
	}

	for (int i = 0; i < H; i++)
	{
		for (int j = 0; j < W; j++)
		{
			ans = max(ans, consecutiveX[i][j] + consecutiveY[i][j] - 1);
		}
	}

	cout << ans << endl;
}

ABC_194_D - Journey

Problem link

https://atcoder.jp/contests/abc194/tasks/abc194_d

Problem Summary

n๊ฐœ์˜ ์ •์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค.
ํ˜„์žฌ๋Š” ๊ทธ๋ž˜ํ”„์˜ 1๋ฒˆ์— ์žˆ๋Š”๋ฐ 1/n ํ™•๋ฅ ๋กœ ๋‹ค๋ฅธ ์ •์ ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๋ชจ๋“  ์ •์ ์„ ์„ ํƒํ•˜๊ฒŒ ๋˜๋Š” ์‹œ๋„ ํšŸ์ˆ˜์˜ ๊ธฐ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

https://blog.hamayanhamayan.com/entry/2021/03/07/000733
์œ„ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•จ.

์ผ๋‹จ, ์„ฑ๊ณต ํ™•๋ฅ ์„ p ๋ผ๊ณ  ํ•  ๋•Œ, ์„ฑ๊ณตํ•  ๋•Œ๊นŒ์ง€ ์ˆ˜ํ–‰ ํ•  ๋•Œ์˜ ์‹œ๋„ ํšŸ์ˆ˜๋Š” ํ™•๋ฅ ์˜ ์—ญ์ˆ˜(1/p)๊ฐ€ ๋œ๋‹ค. ๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ์•„์•ผ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ.

์ฆ๋ช…์€ ์—๋””ํ† ๋ฆฌ์–ผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋˜๊ณ  ์ง๊ด€์ ์œผ๋กœ ๋ณด์ž๋ฉด ํ™•๋ฅ  1/3 ์งœ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ ์„ฑ๊ณต์˜ ๊ธฐ๋Œ“๊ฐ’์€ ์—ญ์ˆ˜์ธ 3ํšŒ๊ฐ€ ๋œ๋‹ค.

์ด๋ฅผ ์ด์šฉํ•ด๋ณด์ž๋ฉด ์ฒ˜์Œ์€ 1๊ฐœ๋ฅผ ๊ณจ๋ž์œผ๋ฏ€๋กœ ๋‚˜๋จธ์ง€๋Š” n-1๊ฐœ์ด๋‹ค. n๊ฐœ ์ „๋ถ€๋ฅผ ๊ณ ๋ฅด๋ ค๋ฉด ๋‚˜๋จธ์ง€ ์ค‘์— ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์•ผ ๋˜๊ณ  ๊ณ ๋ฅด๋Š” ํ™•๋ฅ ์€ n-1 / n ์ด๋‹ค. ์ด์— ๋”ฐ๋ฅธ ๊ธฐ๋Œ“๊ฐ’์€ ์—ญ์ˆ˜์ธ n / n-1 ์ด๋‹ค.
์ด์ œ ๋˜ ๋‹ค๋ฅธ ๋‚˜๋จธ์ง€์—์„œ ๊ณจ๋ผ์•ผ ํ•˜๋ฏ€๋กœ ๊ธฐ๋Œ“๊ฐ’์€ n / n-2 ์ด ๋˜๊ณ  ์ด๋ฅผ ๊ณ„์†ํ•ด์„œ ๋”ํ•ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

Source Code

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
	int n;
	cin >> n;

	long double ans = 0;
	for (int i = 1; i < n; i++)
	{
		ans += (long double)n / (n - i);
	}

	cout << fixed << setprecision(12) << ans << endl;
}

ABC_194_E - Mex Min

Problem link

https://atcoder.jp/contests/abc194/tasks/abc194_e

Problem Summary

0โ‰คiโ‰คNโˆ’M ๋ฒ”์œ„์—์„œ mex์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

  • Mex(x1...xk): x1...xk ์— ์†ํ•˜์ง€ ์•Š๋Š” ๊ฐ€์žฅ ์ž‘์€ 0์ด์ƒ์˜ ์ •์ˆ˜.

Solution

์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์‰ฝ๊ฒŒ ํ’€๋ฆฐ๋‹ค.

Ai์˜ ์ตœ๋Œ€ ๋ฒ”์œ„๊ฐ€ N์ด๋ฏ€๋กœ 0๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ๋งต์— ๋„ฃ์–ด ๋‘๊ณ  ๋ฒ”์œ„ ์•ˆ์—์„œ Ai์˜ ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ๋งต์—์„œ ์ œ๊ฑฐ, Ai๊ฐ’์ด ์—†์–ด์ง€๋ฉด ๋งต์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์†ํ•˜์ง€ ์•Š๋Š” ๊ฐ€์žฅ ์ž‘์€ 0์ด์ƒ์˜ ์ •์ˆ˜ (Mex)๋ฅผ ๋งต ํ˜•ํƒœ๋กœ ๊ณ„์† ์œ ์ง€ํ•˜๋Š” ๊ฒƒ.

Source Code

#include <iostream>
#include <map>
using namespace std;

int a[1500000];
int cnt[1500001];

int main() {
	int n, m;
	cin >> n >> m;

	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}

	map<int, bool> notOccurred;
	for (int i = 0; i <= n; i++)
	{
		notOccurred[i] = true;
	}

	for (int i = 0; i < m; i++)
	{
		if (cnt[a[i]] == 0)
		{
			notOccurred.erase(a[i]);
		}

		cnt[a[i]]++;
	}

	int ans = notOccurred.begin()->first;
	for (int i = m; i < n; i++)
	{
		if (cnt[a[i]] == 0)
		{
			notOccurred.erase(a[i]);
		}

		cnt[a[i]]++;	
		cnt[a[i - m]]--;

		if (cnt[a[i - m]] == 0)
		{
			notOccurred[a[i - m]] = true;
		}

		ans = min(ans, notOccurred.begin()->first);
	}

	cout << ans << endl;
}

CADDI_2018_B / CADDI_2018B_D - Harlequin

Problem link

https://atcoder.jp/contests/caddi2018/tasks/caddi2018_b

Problem Summary

ํ”Œ๋ ˆ์ด์–ด์™€ Lunlun์ด ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉฐ ๊ฒŒ์ž„์„ ํ•œ๋‹ค.
ํ•œ ํ„ด์— ๋‹ค๋ฅธ ์ƒ‰์˜ ์‚ฌ๊ณผ๋งŒ์„ ๋จน์„ ์ˆ˜ ์žˆ๋‹ค.
๋งˆ์ง€๋ง‰ ์‚ฌ๊ณผ๋ฅผ ๋จน์€ ์‚ฌ๋žŒ์ด ์Šน์ž์ผ ๋•Œ ์Šน์ž๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

์ด๋Ÿฐ ๊ฒŒ์ž„๋ฅ˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๊นŒ๋‹ค๋กญ๋‹ค.

์ผ๋‹จ, ์˜ˆ์ œ 1๋ฒˆ์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋Š” ์‚ฌ๊ณผ๊ฐ€ ํ•œ ์ข…๋ฅ˜๋งŒ ๋‚จ์•˜์„ ๊ฒฝ์šฐ ์ง์ˆ˜๊ฐœ์ด๋ฉด ๋ฌด์กฐ๊ฑด ์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. (ํ•˜๋‚˜์”ฉ๋ฐ–์— ๋ชป ๊ฐ€์ ธ๊ฐ€๋ฏ€๋กœ)
์‚ฌ๊ณผ๊ฐ€ ๋‘ ์ข…๋ฅ˜์ผ ๋•Œ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•ด๋ณด์ž.
2, 2์ธ ๊ฒฝ์šฐ ์ฒซ ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ•œ ์ข…๋ฅ˜๋งŒ ๋จน๋Š”๋‹ค๊ณ  ํ•˜๋ฉด 1,2 ์ด๊ณ  ๋‘ ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ 1๊ฐœ ๋‚จ์€ ์‚ฌ๊ณผ๋ฅผ ๋จน๊ฒŒ ๋˜๋ฉด ๋‘ ๋ฒˆ์งธ๊ฐ€ ์Šน๋ฆฌํ•œ๋‹ค.
๋งŒ์•ฝ ์ฒซ ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‘ ์ข…๋ฅ˜ ๋‹ค ๋จน๋Š”๋‹ค๋ฉด 1,1์ด ๋˜๊ณ  ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๋‘ ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‘˜ ๋‹ค ๋จน๊ฒŒ ๋˜์–ด ๋‘ ๋ฒˆ์งธ๊ฐ€ ์Šน๋ฆฌํ•œ๋‹ค.

์ง์ˆ˜๊ฐœ๋กœ ์ผ๋ฐ˜ํ™”๋„ ๊ฐ€๋Šฅํ•œ๋ฐ, 2n, 2n๊ฐœ์ธ ๊ฒฝ์šฐ ์ฒซ ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‘˜ ๋‹ค ๋จน๋“  ํ•˜๋‚˜๋งŒ ๋จน๋“  ๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋‚จ์€ ์‚ฌ๊ณผ์˜ ์ˆ˜๋ฅผ ์ง์ˆ˜๋กœ ๋งŒ๋“ค์–ด ๋ฒ„๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๊ธธ ์ˆ˜ ์—†๋‹ค.

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

์ฆ‰, ์ฒ˜์Œ ์‹œ์ž‘์ด E์ธ ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๊ธฐ๊ณ  ์ฒ˜์Œ ์‹œ์ž‘์ด O์ธ ๊ฒฝ์šฐ๋Š” ์ฒซ ๋ฒˆ์งธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๊ธฐ๊ฒŒ ๋œ๋‹ค.

Source Code

#include <iostream>
#include <string>
using namespace std;

int a[100000];

int main() {
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}

	string ans = "second";
	for (int i = 0; i < n; i++)
	{
		if (a[i] % 2 != 0)
		{
			ans = "first";
			break;
		}
	}

	cout << ans << endl;
}

ABC_178_E - Dist Max

Problem link

https://atcoder.jp/contests/abc178/tasks/abc178_e

Problem Summary

x, y ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊ฐ€์žฅ ๋จผ ๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

์ผ๋‹จ ์œ ๋ช…ํ•œ ๋ฌธ์ œ๋ผ๊ณ  ํ•˜๋Š”๋ฐ... ์ฒ˜์Œ ๋Œ€ํšŒ์—์„œ๋Š” ํ’€์ง€ ๋ชปํ–ˆ๋‹ค...

๋‹ค์‹œ ์ฒœ์ฒœํžˆ ํ•ด๋ณด๋ฉด ์–ด๋ ต์ง€ ์•Š์€ ๋ฌธ์ œ์ด๊ธด ํ•˜๋‹ค

๋จผ์ € ์กฐ๊ฑด์„ ์ž˜ ์จ๋ณด๋ฉด,| xi - xj | + | yi - yj |์˜ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ์ธ๋ฐ ์ ˆ๋Œ“๊ฐ’์„ ๋ฒ—๊ฒจ์ค€ ํ›„ ์ •๋ฆฌํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

  1. xi > xj, yi > yj

(xi - xj) + (yi - yj)
(xi + yi) - (xj + yj)

  1. xi < xj, yi > yj

-(xi - xj) + (yi - yj)
-(xi - yi) + (xj - yj)

  1. xi > xj, yi < yj

(xi - xj) - (yi - yj)
(xi - yi) - (xj - yj)

  1. xi < xj, yi < yj

-(xi - xj) - (yi - yj)
-(xi + yi) + (xj + yj)

์ž˜ ๋ณด๋ฉด ์–‘์ชฝ์ด (xj + yj) ๋˜๋Š” (xj - yj) ํ˜•์‹์œผ๋กœ ์ •๋ฆฌ๊ฐ€ ๋˜๋Š”๋ฐ x, y๊ฐ’์˜ ํ•ฉ ๋˜๋Š” x, y์˜ ๊ฐ’์˜ ์ฐจ๋ฅผ ์ „๋ถ€ ๊ตฌํ•˜๊ณ  ๊ทธ์ค‘์— ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ •๋‹ต์€ max( max(xi + yi) - min(xi + yi), max(xi - yi) - min(xi - yi) )

Source Code

#include <iostream>
#include <climits>
using namespace std;

int main() {
	int n;
	cin >> n;

	int maxPlus = -INT_MAX;
	int minPlus = INT_MAX;
	int maxMinus = -INT_MAX;
	int minMinus = INT_MAX;
	for (int i = 0; i < n; i++)
	{
		int x, y;
		cin >> x >> y;

		int plus = x + y;
		int minus = x - y;

		maxPlus = max(maxPlus, plus);
		minPlus = min(minPlus, plus);
		maxMinus = max(maxMinus, minus);
		minMinus = min(minMinus, minus);
	}

	cout << max(maxPlus - minPlus, maxMinus - minMinus) << endl;
}

ARC_091_B / ABC_090_D - Remainder Reminder

Problem link

https://atcoder.jp/contests/arc091/tasks/arc091_b

Problem Summary

N์„ ๋„˜์ง€ ์•Š๋Š” a, b ์Œ ์ค‘์—์„œ a % b๊ฐ€ K ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

Solution

์˜ˆ์ œ 1์— ํžŒํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ, b์— ๋Œ€ํ•ด K + 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋‹ค ๋Œ๋ ค๊ฐ€๋ฉด์„œ ๋‚˜๋จธ์ง€๊ฐ€ K ์ด์ƒ์ด ๋˜๋Š” a์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

N % b๋ฅผ r๋กœ ๋‘๋ฉด, a๊ฐ€ r ์ดํ•˜์ธ ๊ฒฝ์šฐ์—” N / b + 1๋ฒˆ ๊ฐ€๋Šฅํ•˜๊ณ  r๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๋Š” N / b๋ฒˆ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

K == 0์ผ ๋•, a == 0์ธ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฐ๊ณผ์—์„œ N์„ ๋นผ์ฃผ๋ฉด ๋œ๋‹ค. (๋ฌธ์ œ์—์„œ positive integers ๋ผ๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ)

Source Code

#include <iostream>
using namespace std;

int main() {
	int n, k;

	cin >> n >> k;

	long long res = 0;
	for (int b = k + 1; b <= n; b++)
	{
		// k to b-1
		int cnt = b - k;
		res += cnt * (n / b);

		res += max(0, n % b - k + 1);
	}

	if (k == 0)
	{
		res -= n;
	}

	cout << res << endl;
}

ARC_068_B / ABC_053_D - Card Eater

Problem link

https://atcoder.jp/contests/arc068/tasks/arc068_b

Problem Summary

์ˆ˜๊ฐ€ ์ ํ˜€์ง„ N๊ฐœ์˜ ์นด๋“œ๋“ค์ด ์žˆ๋‹ค.
์นด๋“œ ์ค‘์— 3๊ฐœ๋ฅผ ๊ณ ๋ฅธ ํ›„ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜์™€ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋นผ๊ณ  ๋‚จ์€ ์ˆ˜๋Š” ๋‹ค์‹œ ๋ฑ์— ๋„ฃ๋Š”๋‹ค.
๋‹ค๋ฅธ ์ˆ˜์˜ ์นด๋“œ์˜ ๊ฐœ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ.

Solution

๋จผ์ € 3๊ฐœ๋ฅผ ๊ณ ๋ฅด๊ณ  ํ•˜๋‚˜๋ฅผ ๋‹ค์‹œ ์ง‘์–ด๋„ฃ๋Š” ์—ฐ์‚ฐ์„ ์ž˜ ์‚ดํŽด๋ณด์ž.

๊ทธ๋ƒฅ ์•„๋ฌด ๋‘ ๊ฐœ์˜ ์นด๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
์ผ๋‹จ, ๊ฐ ์นด๋“œ๊ฐ€ ํ•œ ์žฅ๋ฐ–์— ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์—ฐ์‚ฐ์„ ํ•˜๋ฉด ์•ˆ๋˜๊ณ , ๋‘ ์žฅ ์ด์ƒ ์žˆ๋‹ค๋ฉด ๊ทธ ๋‘ ์žฅ์„ ๋‹ค ๋ฝ‘๊ฒŒ ๋˜๋ฉด ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” ๋‹ค์‹œ ๋ฑ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐ ์นด๋“œ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€ ์„ผ ๋‹ค์Œ ์ œ๊ฑฐํ•ด์•ผ ํ•  ๊ฐœ์ˆ˜๋ฅผ ๋”ํ•œ ๋‹ค์Œ ํ™€์ˆ˜๋ฉด ์นด๋“œ์˜ ์ข…๋ฅ˜์˜ ์ˆ˜ -1, ์ง์ˆ˜๋ฉด ์นด๋“œ์˜ ์ข…๋ฅ˜์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

Source Code

#include <iostream>
#include <map>
using namespace std;

int main() {
	int n;
	cin >> n;

	map<int, int> cnt;

	for (int i = 0; i < n; i++)
	{
		int a;
		cin >> a;
		cnt[a]++;
	}

	int toRemove = 0;
	for (auto& i : cnt)
	{
		if (i.second > 1)
		{
			toRemove += i.second - 1;
		}
	}

	if (toRemove % 2 == 0)
	{
		cout << cnt.size() << endl;
	}
	else
	{
		cout << cnt.size() - 1 << endl;
	}
}

ABC_080_C - Shopping Street

Problem link

https://atcoder.jp/contests/abc080/tasks/abc080_c

Problem Summary

์ƒ์ ์„ ์˜คํ”ˆํ•˜๋Š”๋ฐ, ํŠน์ • ์‹œ๊ฐ„์— ๋‹ค๋ฅธ ์ƒ์ ์ด ์—ด๋ฆฐ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ์ตœ๋Œ€๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ด์ต์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.
Fij : i ์ƒ์ ์ด j ์‹œ๊ฐ„์— ์—ด๋ ค ์žˆ๋Š”์ง€ ์—ฌ๋ถ€.
Pij : i ์ƒ์ ์ด j ์‹œ๊ฐ„๋งŒํผ ์—ด๋ฆฐ ์‹œ๊ฐ„์ด ๊ฒน์ณค์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ต.

Solution

์ฒ˜์Œ์— ๋ฌธ์ œ ์ž์ฒด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์ข€ ์–ด๋ ค์› ๋Š”๋ฐ ๊ณ„์† ๋ณด๋‹ˆ๊นŒ ๋Œ€๋žต ๋จธ๋ฆฌ์— ๋“ค์–ด์™”๋‹ค.

์ผ๋‹จ, Joisino๊ฐ€ ์ƒ์ ์„ ์—ด์ง€ ๋ง์ง€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ  ์‹œ๊ฐ„์ด ์ด 10๊ฐœ ์žˆ์œผ๋ฏ€๋กœ ๋‹จ์ˆœ 2^10 ํƒ์ƒ‰์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ƒ์ ์„ ์—ด์—ˆ์„ ๊ฒฝ์šฐ ๊ทธ ์‹œ์ ์— ๋‹ค๋ฅธ ์ƒ์ ์ด ์—ด๋ ค์žˆ๋Š” ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•˜๊ณ  ๋”ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ.

Source Code

#include <iostream>
using namespace std;

int f[100][10];
int p[100][11];

int main() {
	int n;
	cin >> n;

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			cin >> f[i][j];
		}
	}

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 11; j++)
		{
			cin >> p[i][j];
		}
	}

	int ans = -1987654321;
	for (int i = 1; i < (1 << 10); i++)
	{
		int profit = 0;

		for (int j = 0; j < n; j++)
		{
			int cnt = 0;

			for (int k = 0; k < 10; k++)
			{
				// open
				if (i & (1 << k) && f[j][k] == 1)
				{
					cnt++;
				}
			}

			profit += p[j][cnt];
		}

		ans = max(ans, profit);
	}

	cout << ans << endl;
}

ABC_230 - AtCoder Beginner Contest 230

Contest Link

https://atcoder.jp/contests/abc230

Solved problems

A, B, C

Brief explanations

A, B: ๊ฐ„๋‹จ
C: ์น ํ•ด์ง€๋Š” ์ขŒํ‘œ์˜ ๊ทœ์น™์„ ์•Œ๋ฉด ๋œ๋‹ค. i-j, i+j ๊ฐ’์„ ์ด์šฉํ•˜๋ฉด ์น ํ•ด์ง€๋Š” ์œ„์น˜์ธ์ง€ ํŒ๋ณ„ ๊ฐ€๋Šฅํ•˜๋‹ค.

ABC_182_E - Akari

Problem link

https://atcoder.jp/contests/abc182/tasks/abc182_e

Problem Summary

n๊ฐœ์˜ ์ „๊ตฌ๊ฐ€ 4๋ฐฉํ–ฅ์œผ๋กœ ๋น›์„ ์˜๊ณ , m๊ฐœ์˜ ๋ธ”๋Ÿญ์€ ๋น›์„ ์ฐจ๋‹จํ•œ๋‹ค.
์ „์ฒด ๊ทธ๋ฆฌ๋“œ (H*W)์—์„œ ์ด ๋ช‡ ์นธ์ด ๋น›์ด ๋„๋‹ฌํ•˜๋Š”์ง€ ํ™•์ธ.

Solution

๊ฐ„๋‹จํ•œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ.
๋ชจ๋“  ์ „๊ตฌ์—์„œ ์ƒ ํ•˜ ์ขŒ ์šฐ๋กœ ๋น›์„ ์ด์ฃผ๋ฉด์„œ ์นด์šดํŠธ๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

Source Code

#include <iostream>
#include <vector>
#include <cstring>
#include <utility>
using namespace std;

vector<pair<int, int> > bulbs;
int grid[1502][1502];
int h, w, n, m;

const int direction[][2] = { 1, 0, -1, 0, 0, 1, 0, -1 };

int main() {
	cin >> h >> w >> n >> m;

	// set border to -1
	for (int i = 0; i <= h; i++)
	{
		grid[i][0] = -1;
		grid[i][w + 1] = -1;
	}
	for (int i = 0; i <= w; i++)
	{
		grid[0][i] = -1;
		grid[h + 1][i] = -1;
	}

	for (int i = 0; i < n; i++)
	{
		int a, b;
		cin >> a >> b;

		grid[a][b] = 1;
		bulbs.push_back(make_pair(a, b));
	}

	for (int i = 0; i < m; i++)
	{
		int c, d;
		cin >> c >> d;

		grid[c][d] = -1;
	}

	int ans = n;

	for (int i = 0; i < n; i++)
	{
		int a = bulbs[i].first;
		int b = bulbs[i].second;

		for (int d = 0; d < 4; d++)
		{
			int x = a, y = b;
			int cnt = 1;

			while (true)
			{
				int nx = x + direction[d][0] * cnt;
				int ny = y + direction[d][1] * cnt;

				if (grid[nx][ny] == -1 || grid[nx][ny] == 1)
				{
					break;
				}

				if (grid[nx][ny] == 0)
				{
					ans++;
				}
				grid[nx][ny] = 2;
				cnt++;
			}
		}
	}

	cout << ans << endl;
}

PANASONIC_2020_D - String Equivalence

Problem link

https://atcoder.jp/contests/panasonic2020/tasks/panasonic2020_d

Problem Summary

n ๊ธธ์ด์˜ isomorphic ํ•œ normal form๋ฅผ ์ „๋ถ€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

image
image

Solution

์˜ˆ์‹œ์— 2๋ฐ–์— ์—†์–ด์„œ ๋ญ”๊ฐ€ ์• ๋งคํ•œ๋ฐ 4 ์˜ˆ์‹œ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด์ž.

aaaa
aaab
aaba
aabb
aabc
abaa
abab
abac
abba
abbb
abbc
abca
abcb
abcc
abcd

์ด 15๊ฐœ๊ฐ€ ๋‚˜์˜ค๊ณ  ๊ทœ์น™์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

s[i] ๋’ค์—๋Š” s[0 ... i] + 1 ์ดํ•˜์˜ ์•ŒํŒŒ๋ฒณ์ด ์™€์•ผ ํ•œ๋‹ค.

์ข€๋” formalํ•˜๊ฒŒ๋Š”

image

์ด๊ฑด ์žฌ๊ท€์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์งค ์ˆ˜ ์žˆ๋‹ค.

Source Code

#include <iostream>
#include <string>
using namespace std;

int n;

void solve(string s, int prevMax) {
	if (s.length() == n)
	{
		cout << s << endl;
		return;
	}

	for (int i = 0; i <= prevMax + 1; i++)
	{
		solve(s + (char)('a' + i), max(prevMax, i));
	}
}

int main() {
	cin >> n;

	solve("", -1);
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.