Codeforces Round #613 (Div. 2)
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;
}