ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Codeforces Round #613 (Div. 2)
    코드포스(CodeForce) 2020. 1. 16. 22:15
    반응형

    https://codeforces.com/contest/1285/problem/A

     

    Problem - A - Codeforces

     

    codeforces.com

     

    LRLR 입력으로 들어오면 L 은 현재 위치에서 X-1 만큼 이동 R 은 X+1 만큼 이동한다.

    제약사항이 L 만 움직이거나 R 만 움직이거나 모두 안 움직일 때 모든 경우의 수중 차이를 출력 아영 어가 너무 안되네 -0-

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <algorithm>
    #include <functional>
    #include <vector>
    #include <list>
    #include <queue>
    #include <deque>
    #include <map>
    #include <set>
    #include <stack>
    
    using namespace std;
    
    #define MAX_SIZE 100
    #define INF 0x7fffffff
    #define CENDL "\n"
    
    int main() {
    
        cin.tie(0);
        std::ios::sync_with_stdio(false);
    
        int n; cin >> n;
    
        string s; cin >> s;
    
        int cntL = 0;
        int cntR = 0;
        for (int i = 0; i < n; i++) {
            char ch = s[i];
            if (ch == 'L') {
                cntL++;
            }
            else {
                cntR++;
            }
        }
    
        int retL = 0 - cntL;
        int retR = cntR;
    
        int sum = 0;
        for (int i = retL; i <= retR; i++) {
            sum++;
        }
    
        cout << sum;
        return 0;
    }
     

    https://codeforces.com/contest/1285/problem/B

     

    Problem - B - Codeforces

     

    codeforces.com

     

    야서랑 아델이 케이크를 먹으러 갔는데 아델은 모두 종류의 케이크를 먹고 야서는 모든 종류의 케이크를 먹지 못한다. 여기서 주어지는 정수 배열은 각 케이크의 맛의 점수이면 음수면 맛이 없는 거고 양수면 맛있다고 한다 그렇다고 한다.

    만약 7 4 -1의 정수 배열이 입력되면 아델의 경우 모든 경우를 먹기 때문에 합은 7+ 4 +(-1) 임으로 10 이 된다.

    야서의 경우는 모든 케이크를 선택할 수 없기 때문에 선택할 경우의 수는 아래와 같다.

    선택한 케이크
    7 7
    4 4
    7 + 4 11
    7 - 1 6
    4 - 1 3

    문제는 아델이 다 먹은 케이크의 합산 점수보다 야서가 선택한 케이크의 합산 점수보다 높아야 아델은 행복 해진다.

    행복하면 YES를 출력하고 행복하지 않으면 NO를 출력한다.

    아 해석이 그지 같아서 죄송합니다.

     

    결국 아델은 전체 케이크 합산 점수와 야서가 선택한 케이크의 합산 점수보다 높으면 YES를 출력하는 문제입니다.

    전체 소스코드는 아래와 같습니다.

     

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <algorithm>
    #include <functional>
    #include <vector>
    #include <list>
    #include <queue>
    #include <deque>
    #include <map>
    #include <set>
    #include <stack>
    #include <cmath>
    
    using namespace std;
    
    #define MAX_SIZE 100
    #define INF 0x7fffffff
    #define CENDL "\n"
    
    /*
    * @memory  - 2380 kb
    * @time    - 56 ms
    */
    const long long minimum = -1e20;
    int main() {
    
        cin.tie(0);
        std::ios::sync_with_stdio(false);
    
        long long count = 0; cin >> count;
    
        
        while (count--) {
            long long d; cin >> d;
            vector<long long> arr(d);
            vector<long long> dp(d);
            long long sum = 0;
            for (int i = 0; i < d; i++) {
                long long input; cin >> input;
                sum += input;
                arr[i] = input;
            }
    
            dp[0] = arr[0];
            for (int i = 1; i < d; i++) {
                dp[i] = max(arr[i], dp[i-1] + arr[i]);
            }
    
            long long tmp = arr[d - 1];
            long long tmpSum = tmp;
            for (int i = d - 2; i >= 1; --i) {
                tmpSum += arr[i];
                tmp = max(tmp, tmpSum);
            }
            dp[d - 1] = tmp;
            long long cand = minimum;
    
            for (int i = 0; i < d; ++i)
                cand = max(dp[i], cand);
    
    
            if (sum > cand) {
                cout << "YES";
            }
            else {
                cout << "NO";
            }
    
            cout << CENDL;
        }
        
        return 0;
    }    

     

    https://codeforces.com/contest/1285/problem/C

     

    Problem - C - Codeforces

     

    codeforces.com

     

    입력으로 받은 숫자의 LCM 을 구하는 문제입니다. 조금 꼬여 있는데 숫자가 입력되면 두 수를 찾아야합니다. 

    정수 4가 입력 되면

    A B 판정
    1 4 O
    2 2 2는 2로 약수가 됨으로 X
    4 1 O

    입력으로 들어오는 숫자의 공배수를 찾아 INT Vector 에 넣고 나중에 가장 차이크 큰 수를 출력 하도록 구현함.

    아아 증명이안된다 

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <algorithm>
    #include <functional>
    #include <vector>
    #include <list>
    #include <queue>
    #include <deque>
    #include <map>
    #include <set>
    #include <stack>
    #include <cmath>
    
    using namespace std;
    
    #define MAX_SIZE 100
    #define INF 0x7fffffff
    #define CENDL "\n"
    
    /*
    * @memory  - 2380 kb
    * @time    - 56 ms
    */
    
    long long gcd(long long a, long long b) {
        while (b != 0) {
            long long r = a % b;
            a = b;
            b = r;
        }
        return a;
    }
    
    int main() {
    
        cin.tie(0);
        std::ios::sync_with_stdio(false);
    
        long long n; cin >> n;
    
        vector<pair<long long, long long>> arr;
    
        long long sqrtN = sqrt(n);
    
        for (long long i = 1; i <= sqrtN; i++) {
            long long cand = n / i;
            long long namuji = n % i;
    
            if (namuji == 0) {
                if(gcd(cand, i) == 1)
                    arr.push_back(make_pair(i, cand));
            }
        }
    
        long long sol = n;
        for (long long i = 0; i < arr.size(); i++) {
            long long cand = max(arr[i].first, arr[i].second);
            sol = min(sol, cand);
        }
        
        cout << sol << " " << n / sol;
        
        return 0;
    }    ​
     

     

    반응형

    댓글

Designed by Tistory.