티스토리 뷰
https://codeforces.com/contest/1634
Dashboard - Codeforces Round #770 (Div. 2) - Codeforces
codeforces.com
!!!! 모든 답은 제 풀이일 뿐 정해가 아닐 수 있습니다 !!!!
A. Reverse and Concatenate
https://codeforces.com/contest/1634/problem/A
Problem - A - Codeforces
codeforces.com
문제
string s와 integer k가 주어진다. 아래의 2가지중 하나를 k번 연산했을 때 나올 수 있는 string의 수를 출력하는 문제
1. s= s + rev(s)
2. s =rev(s) + s
풀이
주어진 문자가 팰린드롬이 되는 순간 더이상 종류는 증가할 수 없다. 처음부터 팰린드롬이면 답은 1, 이외에는 한번 연산을 하는 순간 모든 문자가 팰린드롬이 되기 때문에 답은 2가된다. k가 0이면 예외적으로 1 출력
코드
#include <bits/stdc++.h>
using namespace std;
string s;
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int T;
cin >> T;
while (T--) {
int n, k;
cin >> n >> k;
cin >> s;
if (k == 0) {
cout << 1 << '\n';
continue;
}
bool flag = true;
int n2 = n / 2;
for (int i = 0; i < n2; i++) {
if (s[i] != s[n - i - 1]) {
flag = false;
break;
}
}
if (flag)cout << 1 << '\n';
else cout << 2 << '\n';
}
}
B. Fortune Telling
https://codeforces.com/contest/1634/problem/B
Problem - B - Codeforces
codeforces.com
문제
n개의 수와 x,y가 주어진다. 엘리스는 x수로 시작하고 밥은 x+3으로 시작한다. 이후 n개의 수로 순차적으로 탐방하면서
1. x += a[i]
2. x ^= a[i]
를해서 엘리스나 밥중 y를 만들 수 있는 사람을 찾는 문제이다.
풀이
x와 x+3은 한 수는 짝수고 한 수는 홀수다. +연산과 xor연산은 둘다 첫번째 비트가 1이면 서로 홀수와 짝수 상태가 바뀐다. 홀수 or 짝수로 시작해서 홀수 짝수 상태가 몇번 바뀌는지 체크하고 y와 홀짝상태가 같은 사람을 출력하면 된다
코드
#include <bits/stdc++.h>
using namespace std;
long long a[100001];
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int T;
cin >> T;
while (T--) {
long long n, x, y;
cin >> n >> x >> y;
long long x2 = x + 3LL;
int even = 0, odd = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
if (a[i] % 2)odd++;
else even++;
}
int now = x % 2;
now += odd;
if ((now % 2) == (y % 2))cout << "Alice\n";
else cout << "Bob\n";
}
}
C. OKEA
https://codeforces.com/contest/1634/problem/C
Problem - C - Codeforces
codeforces.com
문제
n 과 k가 주어진다. 1 .. n*k 까지 수가 있는데 n개의 행에 k개를 나열해서 모든 n개 행의 l..r구간의 평균이 정수가 되도록 수를 나열하는 문제
풀이
n개의 행에 짝수만 따로 홀수만 따로 놓으면된다. 그럼 각 행마다 k개의 홀수나 짝수를 놓아야 하는데 홀수와 짝수의 개수는 각각 (n*k)/2개니까 이 수가 k로 나누어지는지 확인하면 된다. 나누어진다면 홀수끼리 짝수끼리 행애 배치해서 출력한다
코드
#include <bits/stdc++.h>
using namespace std;
int ans[501][501];
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int T;
cin >> T;
while (T--) {
int n, k;
cin >> n >> k;
if (k == 1) {
cout << "YES\n";
for (int i = 1; i <= n; i++)cout << i << '\n';
continue;
}
if (n == 1) {
cout << "NO\n";
continue;
}
int nk = n * k;
if (nk % 2) {
cout << "NO\n";
continue;
}
int nk2 = nk / 2;
if (nk2 % k) {
cout << "NO\n";
continue;
}
int n2 = n / 2;
int x = 1,y=1;
for (int i = 1; i <= nk; i += 2) {
ans[x][y] = i;
x++;
if (x > n2) {
x = 1; y++;
}
}
x = n2 + 1; y = 1;
for (int i = 2; i <= nk; i += 2) {
ans[x][y] = i;
x++;
if (x > n) {
x = n2 + 1; y++;
}
}
cout << "YES\n";
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
cout << ans[i][j] << ' ';
}
cout << '\n';
}
}
}
자세한 설명에 중점을 두기보다는 대회 기록에 중점을 둔 글입니다 !
틀린 부분은 감사히 지적받겠습니다.
'Algorithm > 코드포스' 카테고리의 다른 글
Codeforces Round #771 (Div. 2) 1589 -> 1646 (0) | 2022.02.15 |
---|---|
Codeforces Global Round 19 1663 -> 1589 (0) | 2022.02.14 |
Codeforces Round #769 (Div. 2) 1678 -> 1654 (0) | 2022.02.02 |
Codeforces Round #768 (Div. 2) 1689 -> 1678 (0) | 2022.01.28 |
Codeforces Round #767 (Div. 2) 1673 -> 1689 (0) | 2022.01.23 |