[c++] μκ³ λ¦¬μ¦ λ¬Έμ ν΄κ²° μ λ΅ 1κΆ :: PI (μ λ΅ μ½λ x)
PI
https://www.algospot.com/judge/problem/read/PI
λ¬Έμ
(μ£Όμ: μ΄ λ¬Έμ λ TopCoder μ λ²μ λ¬Έμ μ λλ€.)
κ°λ TV μ 보면 μμ£Όμ¨μ λͺλ§ μ리κΉμ§ μ€μ€ μΈμ°λ μ λλ€μ΄ λ±μ₯νκ³€ ν©λλ€. μ΄λ€μ΄ μ΄ μλ₯Ό μΈμ°κΈ° μν΄ μ¬μ©νλ λ°©λ² μ€ νλλ‘, μ«μλ₯Ό λͺ μ리 μ΄μ λμ΄ μΈμ°λ κ²μ΄ μμ΅λλ€. μ΄λ€μ μ«μλ₯Ό μΈ μ리μμ λ€μ― μ리κΉμ§λ‘ λμ΄μ μΈμ°λλ°, κ°λ₯νλ©΄ 55555 λ 123 κ°μ΄ μΈμ°κΈ° μ¬μ΄ μ‘°κ°λ€μ΄ λ§μ΄ λ±μ₯νλ λ°©λ²μ ννκ³€ ν©λλ€.
μ΄ λ, κ° μ‘°κ°λ€μ λμ΄λλ λ€μκ³Ό κ°μ΄ μ ν΄μ§λλ€:
- λͺ¨λ μ«μκ° κ°μ λ (μ: 333, 5555) λμ΄λ: 1
- μ«μκ° 1μ© λ¨μ‘° μ¦κ°νκ±°λ λ¨μ‘° κ°μν λ (μ: 23456, 3210) λμ΄λ: 2
- λ κ°μ μ«μκ° λ²κ°μ κ°λ©° μΆνν λ (μ: 323, 54545) λμ΄λ: 4
- μ«μκ° λ±μ°¨ μμ΄μ μ΄λ£° λ (μ: 147, 8642) λμ΄λ: 5
- κ·Έ μΈμ κ²½μ° λμ΄λ: 10
μμ£Όμ¨μ μΌλΆκ° μ λ ₯μΌλ‘ μ£Όμ΄μ§ λ, λμ΄λμ ν©μ μ΅μννλλ‘ μ«μλ€μ 3μ리μμ 5μ리κΉμ§ λμ΄ μ½κ³ μΆμ΅λλ€. μ΅μμ λμ΄λλ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νμΈμ.
μ λ ₯
μ λ ₯μ 첫 μ€μλ ν μ€νΈ μΌμ΄μ€μ μ C (<= 50) κ° μ£Όμ΄μ§λλ€. κ° ν μ€νΈ μΌμ΄μ€λ 8κΈμ μ΄μ 10000κΈμ μ΄νμ μ«μλ‘ μ£Όμ΄μ§λλ€.
μΆλ ₯
κ° ν μ€νΈ μΌμ΄μ€λ§λ€ ν μ€μ μ΅μμ λμ΄λλ₯Ό μΆλ ₯ν©λλ€.
μμ μ λ ₯
5
12341234
11111222
12122222
22222222
12673939
μμ μΆλ ₯
4
2
5
2
14
λμ λ΅
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#define NULL_INT -1e9
using namespace std;
map<int, int> calMap;
string s;
int a; int b; int c; int d;
int point[4] = { 1,2,4,5 };
vector<int> answer;
void calValue(int start, int value) {
int flag[4] = { 1,1,1,1 };
b = 1; c = NULL_INT; d = NULL_INT;
int tmp_flag[3] = { 1,1,1 };
int less = s.length() - start;
if (less < 3) {
return;
}
if (less <= 5) {
tmp_flag[0] = 0; tmp_flag[1] = 0; tmp_flag[2] = 0;
tmp_flag[less - 3] = 1;
}
else {
less = 5;
}
for (int i = start+1; i < start+less; i++) {
// κ²°κ³Ό μΈ‘μ
//
if (flag[0]==1) {
if (s[i] != s[i - 1])
flag[0] = 0;
}
//
if (flag[1]==1) {
if (!(abs(s[i] - s[i - 1]) == 1 && (b == NULL_INT || b == s[i] - s[i - 1])))
flag[1] = 0;
else {
b = s[i] - s[i - 1];
}
}
//
if (flag[2] == 1) {
if (c == NULL_INT)
c = s[i - 1] - '0';
else if (c != s[i] - '0') {
flag[2] = 0;
}
else {
c = s[i-1] - '0';
}
}
//
if (flag[3] == 1) {
if (d == NULL_INT) {
d = s[i] - s[i - 1];
}
else if (d == s[i] - s[i - 1]) {
flag[3] = 1;
}
else {
d = s[i] - s[i - 1];
flag[3] = 0;
}
}
// κ²°κ³Όλ£κΈ°
if (i == start + 2 && tmp_flag[0]) {
for (int i = 0; i < 4; i++) {
if (flag[i]) {
if (calMap.find(start + 3) == calMap.end() || calMap[start + 3] > value+point[i]) {
calMap[start + 3] = value+point[i];
tmp_flag[0] = 0;
}
break;
}
}
if (tmp_flag[0]) {
if (calMap.find(start + 3) == calMap.end() || calMap[start + 3] > value + 10) {
calMap[start + 3] = value + 10;
}
}
}
else if (i == start + 3 && tmp_flag[1]) {
for (int i = 0; i < 4; i++) {
if (flag[i]) {
if (calMap.find(start + 4) == calMap.end() || calMap[start + 4] > value + point[i]) {
calMap[start + 4] = value + point[i];
tmp_flag[1] = 0;
}
break;
}
}
if (tmp_flag[1]) {
if (calMap.find(start + 4) == calMap.end() || calMap[start + 4] > value + 10) {
calMap[start + 4] = value + 10;
}
}
}
else if (i == start + 4 && tmp_flag[2]) {
for (int i = 0; i < 4; i++) {
if (flag[i]) {
if (calMap.find(start + 5) == calMap.end()|| calMap[start + 5] > value + point[i]) {
calMap[start + 5] = value + point[i];
tmp_flag[2] = 0;
}
break;
}
}
if (tmp_flag[2]) {
if (calMap.find(start + 5) == calMap.end() || calMap[start + 5] > value + 10) {
calMap[start + 5] = value + 10;
}
}
}
}
}
int main() {
int C;
cin >> C;
cin.ignore(256, '\n');
while (C--) {
getline(cin, s);
if (s[s.length()-1] == ' '){
s.erase(s.begin() + s.length() - 1);
}
calValue(0,0);
vector<int> ans;
while (calMap.size()) {
int size = calMap.size();
map<int, int>::iterator iter;
for (int i = 0; i<size; i++) {
iter = calMap.begin();
if (iter->first == s.length()) {
ans.push_back(iter->second);
}
else {
calValue(iter->first, iter->second);
}
calMap.erase(iter);
}
}
sort(ans.begin(), ans.end());
answer.push_back(ans.back());
}
for (int i = 0; i < answer.size(); i++) {
cout << answer[i] << endl;
}
}
μμ λ΅μ https://pastebin.com/rhMYwAN3 μ΄κ³³μ μλ ν μ€νΈμΌμ΄μ€λ₯Ό μ§νν΄ λ΄€μ λ λͺκ°μ§ λ΅μ μ΄κΈλλ€. λ²μκ° ν° κ³³μμλ§ μ΄κΈλμ μ νν μ΄μ λ₯Ό μ°Ύμ§λ λͺ»νμ§λ§, μ μ΄μ μ½λ© μ μλͺ»λ μ΅κ΄μ μ μ§νλ κ²μ΄ λ¬Έμ μΈλ― νμ¬ μ¬κΈ°μ κΈ°μ¬νλ€.
-
λ©λͺ¨μ΄μ μ΄μ μ μ£Όμλ₯Ό λ°μμ νλ λ°©λ²μΌλ‘ μ°μ
-
μ¬κ·λ‘ λ릴 μ μλ ꡬ쑰μ΄κ³ μ€νμ€λ²νλ‘μ°κ° μ λ μ λλΌλ©΄ μ¬κ·ν¨μλ‘ κ΅¬ννμ
νμ¬ BFSκ°μ΄ queueλ₯Ό μ΄μ©ν΄μ ꡬννλλ°, μ΄λΆλΆμμ μ€λ₯κ° λ°μνλμ§λ λͺ¨λ₯΄κ² λ€.
-
indexλ ν·κ°λ¦¬μ§ μκ² μ λνμ¬ μ°μ.
-
μ΅λν κ°λ¨νκ² κ΅¬ννμ.
λ€μμ κΌ λ€μ νμ΄λ³Ό κ²
λ€λ₯Έ λ΅
https://jaimemin.tistory.com/319
algospot PI
λ¬Έμ λ§ν¬μ λλ€: https://algospot.com/judge/problem/read/PI μκ°λ³΄λ€ μ½κ² μκ³ λ¦¬μ¦μ μκ°ν΄λΌ μ μμμ΅λλ€. κ²°κ³Όμ μΌλ‘λ μ± μ λ΄μ©κ³Ό κ±°μ κ°μ§λ§ getRank ν¨μλ₯Ό μ΅μ νν λμ INF μ¬μ μν λλ₯Ό μ μΈ..
jaimemin.tistory.com
μ΄κ³³μ λ΅μ 보면 μ μμΈ κ² κ°λ€.