A. Strange Table

C++

#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int tc;
    cin >> tc;
    while(tc--){
        ll n, m, x;
        cin >> n >> m >> x;
        if(x%n == 0) cout << (n-1)*m + (ll)ceil((double)x/n) << "\n";
        else cout << (x%n-1)*m + (ll)ceil((double)x/n) << "\n";
    }
    return 0;
}

n 행 m 열로 이루어진 테이블에 숫자를 채우려고 한다. 세로로 숫자를 매겨 나가면 by columns, 가로로 숫자를 매겨 나가면 by rows 라고 할 때, by columns 에서의 x 값 위치가 by rows 에서 어떤 값인지를 묻는 문제이다.

by columns 는 세로로 값을 매겨 나가므로 x 는 x%n 행, x/n 열에 존재한다. (x%n == 0 일 경우는 n 행, x/n-1 열)
알아낸 x 값의 행, 열 정보를 이용해 by rows 의 값 (행번호 - 1) * m + (열번호) 을 구할 수 있다.

C. Double-ended Strings

C++

#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int tc;
    cin >> tc;
    while(tc--){
        string a, b;
        cin >> a >> b;
        int n = a.size();
        int m = b.size();
        a = ' ' + a;
        b = ' ' + b;
        vector<vector<int>> dp(n+1, vector<int>(m+1, 0));
        int ans = 0;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                if(a[i] == b[j]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                    ans = max(ans, dp[i][j]);
                }
            }
        }
        cout << n+m-2*ans << "\n";
    }
    return 0;
}

Longest Common Substring 을 구하는 문제이다. 문자열 a, b 의 길이가 최대 20 뿐이라 모든 부분 문자열을 확인 O(n2m) 하는 방법으로도 통과할 수 있지만 O(nm) 복잡도가 나오는 dp 로 풀이하였다.

후기

b 번이 조금 까다롭게 나온 것 같다. div.3 이라 세문제는 풀고 싶었는데 아쉽다.

'Codeforces' 카테고리의 다른 글

Codeforces #1499B Binary Removals  (0) 2021.03.27
Codeforces #1485B Replace and Keep Sorted  (0) 2021.03.27
Codeforces #1476B Inflation  (0) 2021.03.24
Codeforces #1476A K-divisible Sum  (0) 2021.03.24
Codeforces #1480B The Great Hero  (0) 2021.03.22

댓글