Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

10-yuyu0830 #39

Merged
merged 3 commits into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions yuyu0830/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
| 4μ°¨μ‹œ | 2024.03.26 | 뢄할정볡 | [ν–‰λ ¬ 제곱](https://www.acmicpc.net/problem/10830) | - |
| 5μ°¨μ‹œ | 2024.03.29 | 탐색 | [μŠ€λ„μΏ ](https://www.acmicpc.net/problem/2239) | - |
| 6μ°¨μ‹œ | 2024.04.03 | 자료ꡬ쑰 | [λ‚˜λ§Œ μ•ˆλ˜λŠ” μ—°μ• ](https://www.acmicpc.net/problem/14621) | - |
| 10μ°¨μ‹œ| 2024.04.29 | λ°±νŠΈλž˜ν‚Ή | [λΉ„μˆ](https://www.acmicpc.net/problem/1799) | - |
---
58 changes: 58 additions & 0 deletions yuyu0830/μ •λ ¬/23970.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#include <iostream>

#define fastio cin.tie(NULL); cin.sync_with_stdio(false);

using namespace std;

int arr[2][10001] = {0, };
int n, arrPtr = 0;

bool same() {
// start at 'arrPtr'
for (int i = arrPtr; i < n; i++) {
// if diff, terminate this function
if (arr[0][i] != arr[1][i]) return false;
// if same, then that index will same forever. no reason to compare again.
arrPtr++;
}
return true;
}

int main() {
fastio
cin >> n;
for (int i = 0; i < 2; i++)
for (int j = 0; j < n; j++)
cin >> arr[i][j];

int rnd = n - 1, ptr = 0;

// it can be same before sort
if (same()) {
printf("1\n");
return 0;
}

while (rnd) {
// sort [0] to [ptr - rnd]
int a = arr[0][ptr];
int b = arr[0][ptr + 1];

arr[0][ptr] = min(a, b);
arr[0][ptr + 1] = max(a, b);

// if this index is last index in this round
if (++ptr == rnd) {
// next round
ptr = 0;
rnd--;
}

if (same()) {
// if arr is same
printf("1\n");
return 0;
}
}
printf("0\n");
}
68 changes: 68 additions & 0 deletions yuyu0830/탐색/1799.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#include <iostream>
#include <vector>

using namespace std;

typedef pair<int, int> ii;

int leftArr[2][11] = {0, };
int rightArr[2][11] = {0, };
int map[11][11] = {0, };

int n, ans[2] = {0, }, m[2] = {0, };
vector<ii> v[2];

void solve(int color, int idx) {
// current color, idx bishop's position
int x = v[color][idx].first;
int y = v[color][idx].second;

// position about each diagonal direction
int rightPos = (x + y) / 2;
int leftPos = ((n - x - 1) + y) / 2;

// if can set bishop in (x, y) position
if (map[x][y] && !rightArr[color][rightPos] && !leftArr[color][leftPos]) {
// then check diagonal position
rightArr[color][rightPos] = 1;
leftArr[color][leftPos] = 1;

// update max value
m[color] = max(m[color], ++ans[color]);

// search same color, another position bishop
for (int i = idx + 1; i < v[color].size(); i++)
solve(color, i);

// set off current bishop
rightArr[color][rightPos] = 0;
leftArr[color][leftPos] = 0;

ans[color]--;
}
}

int main() {
cin >> n;

for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int t; cin >> t;
map[i][j] = t;
// if bishop can set in (i, j) push in vector[board color]
if (t) v[i % 2 != j % 2].push_back(make_pair(i, j));
}
}

for (int color = 0; color < 2; color++) {
for (int i = 0; i < v[color].size(); i++) {
// search every position that can set in bishop
solve(color, i);

// if (left bishop + current max value) less then max value then break this search
if (ans[color] + (v[color].size() - i - 1) < m[color]) break;
}
}

printf("%d\n", m[0] + m[1]);
}