코드포스(CodeForce)

Codeforces Round #613 (Div. 2)

cepiloth 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;
}    ​
 

 

반응형