본문 바로가기

prompt

Round 171

시도했던 문제

- B. 수강변경 https://www.acmicpc.net/problem/23305

- C. 눈덩이 굴리기 https://www.acmicpc.net/problem/23305

- D. 2xN 예쁜 타일링 https://www.acmicpc.net/problem/18230

수강변경 - 성공 

먼저 바꾸고자 하는 수업 개수를 전부 센다.

다음으로 바꾸고싶은 수업이 있으면 count-- 한다.

수업 개수가 이미 0이라면 원하는 수업을 수강하지 못하는 학생이므로 ans++ 한다.

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#define MAXV 987654321

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

int v[1000005];

int main() {
    int n;
    scanf("%d", &n);
    
    for (int i = 0; i < n; i++) {
        int a;
        scanf("%d", &a);
        v[a]++;
    }
    
    int ans = 0;
    for (int i = 0; i < n; i++) {
        int a;
        scanf("%d", &a);
        
        if (v[a] == 0)
            ans++;
        else
            v[a]--;
    }
    
    printf("%d\n", ans);
    
    
    return 0;
}

눈덩이 굴리기 - 실패

재귀로 눈덩이를 +1칸으로 굴리는 경우 / +2칸으로 던지는 경우 두 경우를 모두 확인한 다음에 최대를 구하면 되겠다 싶었다. 

각 함수마다 2개의 분기가 생기고 트리의 높이는 최대 대회의 시간만큼이다.

2 ^ 10이라 시간복잡도 안에 충분히 돌 수 있다.

 

맞을 것 같았지만 틀렸다. 뭔가 꼬였다 싶어서 나중에 다시 확인해봐야지 싶었다. 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#define MAXV 987654321

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

int v[1000005];
int n, m;

int solve(int idx, int m) {
    if (n < idx || m < 0)
        return 0;
    
    return max(v[idx] + solve(idx + 1, m - 1) , v[idx] / 2 + solve(idx + 2, m - 1));
}

int main() {
    scanf("%d %d", &n, &m);
    
    for (int i = 1; i <= n; i++) {
        scanf("%d", &v[i]);
    }
    
    v[0] = 1;
    cout << solve(0, m);
    
    
    return 0;
}

 

2xN 예쁜 타일링 - 성공

예쁨이 큰 것부터 타일을 차곡차곡 쌓으면 된다. 

2 * 1인 타일 두 개로 2 * 2 타일을 만들 수 있으므로 타일을 합쳐서 생각했다. 

 

로직

- 홀수인 경우 가장 예쁜 2 * 1 타일을 하나 끼운다

- 2 * 1 타일 두 개를 합쳐 2 * 2 타일을 만든다

- 2 * 2 타일을 정렬해서 가장 큰 것부터 끼운다

 

2 * 1을 먼저 끼우는 경우 남은 타일을 만드는게 조금 헷갈렸다. 

타일 하나 없는거 생각 못하고 구현해서 인덱스 아웃 오브 바운드 뜨고,,, 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#define MAXV 987654321

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;


int main() {
    int n, a, b;
    scanf("%d %d %d", &n, &a, &b);
    
    vector<int> va(a);
    for (int i = 0; i < a; i++)
        scanf("%d", &va[i]);
    vector<int> vb(b);
    for (int i = 0; i < b; i++)
        scanf("%d", &vb[i]);
    
    sort(all(va), greater<int>());
    
    i64 ans = n % 2 == 0 ? 0 : va[0];
    for (int i = n % 2; i + 1 < a; i += 2) {
        vb.push_back(va[i] + va[i + 1]);
    }
    
    sort(all(vb), greater<int>());
    
    for (int i = 0; i < n/2; i++) {
        ans += vb[i];
    }
    
    printf("%lld", ans);
    
    
    return 0;
}

업솔빙

- C. 눈덩이 굴리기 https://www.acmicpc.net/problem/23305

- E. 플로이드에 오타가? https://www.acmicpc.net/problem/13314

 

눈덩이 굴리기

 

 

 

 

 

 

플로이드에 오타가?

 

 

 

 

 

 

 

 

 

 

'prompt' 카테고리의 다른 글

Round 172  (1) 2022.10.29
2021 연말대회 후기  (0) 2021.12.13
[토요라운드] E. 컴백홈 (1189)  (0) 2020.12.07
[토요라운드] D. 에너지 드링크 (20115)  (0) 2020.12.07
[토요라운드] C. 중간고사 채점 (15702)  (0) 2020.12.07