SOL)
문자열의 양끝점을 기준으로 하나씩 칸을 옮겨가며 어떤 문자를 넣을지 결정하면 된다.
if 양쪽 '?' : 가중치가 작은 값으로
if 한쪽 '?' : '?'가 아닌 다른 문자열을 넣어준다.
else continue
[-] Collapse
#include<cstdio>
#include<algorithm>
char arr[1000];
int val[200];
int main(){
int t; scanf("%d", &t);
while (t--){
int size, a, b, ans = 0; scanf("%d%s%d%d", &size, arr, &a, &b);
val['a'] = a; val['b'] = b;
for (int s = 0, e = size - 1; s <= e; s++, e--){
if (arr[s] == '?' && arr[e] == '?'){
if (s == e) ans += std::min(a, b);
else ans += 2 * std::min(a, b);
}
else if (arr[s] == '?')
ans += val[arr[e]];
else if (arr[e] == '?')
ans += val[arr[s]];
}
printf("%d\n", ans);
}
}
#include<algorithm>
char arr[1000];
int val[200];
int main(){
int t; scanf("%d", &t);
while (t--){
int size, a, b, ans = 0; scanf("%d%s%d%d", &size, arr, &a, &b);
val['a'] = a; val['b'] = b;
for (int s = 0, e = size - 1; s <= e; s++, e--){
if (arr[s] == '?' && arr[e] == '?'){
if (s == e) ans += std::min(a, b);
else ans += 2 * std::min(a, b);
}
else if (arr[s] == '?')
ans += val[arr[e]];
else if (arr[e] == '?')
ans += val[arr[s]];
}
printf("%d\n", ans);
}
}
댓글 없음:
댓글 쓰기