알고리즘
백준 17828번 문자열 화폐 C++
영춘권의달인
2023. 5. 7. 13:05
https://www.acmicpc.net/problem/17828
17828번: 문자열 화폐
첫 번째 줄에 문자열의 길이 N(1 ≤ N ≤ 5,000,000)과, 문자열의 가치를 나타내는 정수 X(1 ≤ X ≤ 500,000,000)가 공백으로 구분되어 주어진다.
www.acmicpc.net
그리디하게 a의 최대 개수를 구한다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>
using namespace std;
using int64 = long long;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int64 n, x;
cin >> n >> x;
if (n * 26 < x || n > x) {
cout << "!";
}
else {
int a = 0;
for (int i = n; i >= 0; i--) {
if (i + (n - i) * 26 >= x) {
a = i;
break;
}
}
for (int i = 0; i < a; i++) cout << 'A';
int cnt = (x - a) / 26;
if ((x - a) % 26 != 0) {
cout << char(65 + (x - a) % 26 - 1);
}
for (int i = 0; i < cnt; i++) {
cout << 'Z';
}
}
}