아니 이거 문제에 XOR 적혀있어서 XOR이 어디 쓰일까 계속 생각했다.
끝까지 왜 XOR인지 모르겠다.
난 XOR 같은 거 연산하면 0되는거 쓰려고 기대했다고.
암튼.. 문제 읽고 어 이거 배열 두 개 만들어서 2면 1 1, 1이면 1 0, 0이면 0 0 넣으면 되는 거 아닌가? 싶었다.
근데 틀렸음ㅎㅎ
다시 보니 max(a, b)가 min이 되게 해라는 조건이 있었는데 빼먹고 생각했다.
조금 고민해봤는데 어떻게 해야할지 몰라서 B로 넘어갔다.
다시 돌아와서 고민해봤는데 21211 이 예시를 보고 힌트를 얻었다.
11000
10211
앞에서 부터 보면 1 0으로 나뉜 순간 아래쪽 배열에 값이 다 가있다ㅋㅋ
1 0인 순간 위 배열이 더 큰 값으로 결정나니 최대한 아래 쪽 배열에 숫자를 몰아서 값을 줄여야 겠구나!
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
using i64 = long long;
using ii = pair<int, int>;
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int x;
scanf("%d", &x);
vector <int> a(x);
vector <int> b(x);
string input;
cin >> input;
bool is_one = false;
for (int j = 0; j < x; j++)
{
if (is_one == false)
{
if (input[j] == '2')
{
a[j] = 1;
b[j] = 1;
}
else if (input[j] == '1')
{
a[j] = 0;
b[j] = 1;
is_one = true;
}
else
{
a[j] = 0;
b[j] = 0;
}
}
else
{
if (input[j] == '2')
{
a[j] = 2;
b[j] = 0;
}
else if (input[j] == '1')
{
a[j] = 1;
b[j] = 0;
is_one = true;
}
else
{
a[j] = 0;
b[j] = 0;
}
}
}
for (int j = 0; j < x; j++)
cout << a[j];
cout << endl;
for (int j = 0; j < x; j++)
cout << b[j];
cout << endl;
}
return 0;
}
코드는 이렇게 짰다..
이번 코포 특징 : 코드 더럽게 짰음ㅎㅎ;
시간 다 돼가고 마음이 급해서 어쩔 수 없었다.
암튼 값 최대한 똑같이 나누다가 1인 경우가 되면 1 0 값을 집어넣는데, 이 이후부터 0쪽에 값을 몰아줬다.
북님은 더 깔쌈하게 짰겠지? 내일 코드 구경해야겠다.
ㅋㅋㅋㅋ비슷했다 (쉬운 A번인데 그렇겠지!)
아 신기한게 위에 입출력 속도 빠르게 하는 걸 추가하셨다.
ios::sync_with_stdio(false);
cin.tie(nullptr);
이번에는 왜 추가한 거지??
모든 테케 합쳐도 5만이라 시간 넉넉하지 않나??
궁금하지만 내일까지 참아야지
'코드포스' 카테고리의 다른 글
[코드포스 Practice19] C. Skier (0) | 2020.05.15 |
---|---|
[코드포스 Practice19] B. Segments (0) | 2020.05.15 |
[코드포스 Practice19] 후기 (0) | 2020.05.15 |
[코드포스 Practice18] E. Lakes in Berland (0) | 2020.04.16 |
[코드포스 Practice18] D. Mr. Kitayuta's Colorful Graph (0) | 2020.04.16 |