AtCoder ABC 171

결과

F를 못 풀었습니다.

A. αlphabet

단순 구현

1
2
3
4
5
6
7
8
#include <bits/stdc++.h>
using namespace std;

int main(){
  char a; cin >> a;
  if(a <= 'Z') cout << 'A';
  else cout << 'a';
}

B. Mix Juice

단순 구현

1
2
3
4
5
6
7
8
9
10
11
#include <bits/stdc++.h>
using namespace std;

int main(){
  int n, k, a[1010], sum = 0;
  cin >> n >> k;
  for(int i=1; i<=n; i++) cin >> a[i];
  sort(a+1, a+n+1);
  for(int i=1; i<=k; i++) sum += a[i];
  cout << sum;
}

C. One Quadrillion and One Dalmatians

글자 수를 결정한 뒤, 적절한 수식을 이용해 앞글자부터 하나씩 채워주면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <bits/stdc++.h>
#define x first
#define y second
#define all(v) v.begin(), v.end()
#define compress(v) sort(all(v)), v.erase(unique(all(v)), v.end())
using namespace std;

typedef long long ll;

ll n, ed, pw[101010], sum[101010];

int main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
    pw[0] = sum[0] = 1;
    for(int i=1; ; i++){
        pw[i] = pw[i-1] * 26;
        sum[i] = sum[i-1] + pw[i];
        if(sum[i] > 1e16){ ed = i; break; }
    }

    cin >> n; ll len;
    for(int i=1; i<=ed; i++){
        if(sum[i] > n){
            n -= sum[i-1]; len = i; break;
        }
    }
    for(int i=len-1; ~i; i--){
        for(int j=0; j<26; j++){
            if(n < pw[i]){
                cout << char(j+'a'); break;
            }
            n -= pw[i];
        }
    }
}

D. Replacing

cnt[x] = x의 개수를 관리해주면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
#define x first
#define y second
#define all(v) v.begin(), v.end()
#define compress(v) sort(all(v)), v.erase(unique(all(v)), v.end())
using namespace std;

typedef long long ll;

ll n, q, cnt[101010], sum;

int main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
    cin >> n;
    for(int i=1; i<=n; i++){
        ll t; cin >> t; cnt[t]++; sum += t;
    }
    cin >> q;
    while(q--){
        ll a, b; cin >> a >> b;
        sum -= cnt[a] * a;
        sum -= cnt[b] * b;
        cnt[b] += cnt[a]; cnt[a] = 0;
        sum += cnt[b] * b;
        cout << sum << "\n";
    }
}

E. Red Scarf

어떤 수 x를 홀수 번 xor하면 x가 되고, 짝수 번 xor하면 0이 된다는 것을 이용하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <bits/stdc++.h>
#define x first
#define y second
#define all(v) v.begin(), v.end()
#define compress(v) sort(all(v)), v.erase(unique(all(v)), v.end())
using namespace std;

typedef long long ll;

int n, a[202020], sum;

int main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
    cin >> n;
    for(int i=1; i<=n; i++){
        cin >> a[i]; sum ^= a[i];
    }
    for(int i=1; i<=n; i++) cout << (sum ^ a[i]) << " ";
}