AtCoderのARC
次のARCの問題へ
前のARCの問題へ
ARC019-B こだわりの名前
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("ARC");
//73
}
else if (InputPattern == "Input2") {
WillReturn.Add("S");
//0
}
else if (InputPattern == "Input3") {
WillReturn.Add("NOLEMONNOMELON");
//350
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
string A = InputList[0];
int UB = A.Length - 1;
int UnMatchPairCnt = 0;
for (int I = 0; I <= UB / 2; I++) {
int PairInd = UB - I;
if (A[I] != A[PairInd]) {
UnMatchPairCnt++;
}
}
long Answer = 0;
for (int I = 0; I <= UB; I++) {
int PairInd = UB - I;
int CurrUnMatchPairCnt = UnMatchPairCnt;
if (A[I] != A[PairInd]) {
CurrUnMatchPairCnt--;
}
if (CurrUnMatchPairCnt == 0) {
// 違う文字同士にする必要がある場合
if ((UB % 2 == 0 && I == UB / 2) == false) {
if (A[I] == A[PairInd]) {
Answer += 25;
}
else {
Answer += 24;
}
}
}
else {
// 自由に決定可能な場合
Answer += 25;
}
}
Console.WriteLine(Answer);
}
}
解説
事前に各ペアが一致してるかを調べます。
次に、各ペアごとに、このペアを除外した場合に、
他のペアが全て一致してるかで、選べる文字を分岐させ、
場合の数の和の法則で、解に計上してます。