題目敘述
每個測資都只有10行,前九行每行有一個正整數N,接下來會有N個字串,分別代表這一個打者每一次打球的結果。每次打擊都是從第一位打者打到第九位打者接下來回到第一位。最後一行有一個正整數B代表要輸出當出局數累計到B時的分數,每三次出局的時候所有壘包都會清空。
以下為每個字串的意思:
(1) 安打:以1B,2B,3B和HR 分別代表一壘打、二壘打、三壘打和全(四)壘打。
(2) 出局:以 FO,GO和 SO表示。
範例輸入 #1
5 1B 1B FO GO 1B
5 1B 2B FO FO SO
4 SO HR SO 1B
4 FO FO FO HR
4 1B 1B 1B 1B
4 GO GO 3B GO
4 1B GO GO SO
4 SO GO 2B 2B
4 3B GO GO FO
3
範例輸出 #1
0
範例輸入 #2
5 1B 1B FO GO 1B
5 1B 2B FO FO SO
4 SO HR SO 1B
4 FO FO FO HR
4 1B 1B 1B 1B
4 GO GO 3B GO
4 1B GO GO SO
4 SO GO 2B 2B
4 3B GO GO FO
6
範例輸出 #2
5
解題思路
將資料收完之後可以判斷現在的打者是幾壘安打,然後從第三壘開始判斷。假如現在是一壘安打的話三壘的人就會跑回本壘,分數就會+1,然後三壘會清空。然後再來判斷二壘,如果二壘有人的話就會跑到三壘然後二壘清空,以此類推。需要注意的是當出局數為三的倍數時需清掉所有壘上的人。
解題程式碼如下 (僅供參考):
#include <iostream>
#include <vector>
using namespace std;
int rtn(string str)
{
if (str[0] == '1') return 1;
if (str[0] == '2') return 2;
if (str[0] == '3') return 3;
if (str[0] == 'H') return 4;
else return -1;
}
int main() {
vector<vector<int>>all;
int max = -999;
for (int i = 0; i<9; i++)
{
int N;
cin >> N;
if (N > max) max = N;
vector<int>score;
for (int j = 0; j<N; j++)
{
string str;
cin >> str;
score.push_back(rtn(str));
}
all.push_back(score);
}
int N;
cin >> N;
vector<int>base;
base.push_back(0);
base.push_back(0);
base.push_back(0);
base.push_back(0);
int score = 0;
int out = 0;
for (int i = 0; i<max; i++)
{
for (int j = 0; j<9; j++)
{
int aa = all[j][i];
if (aa == 1)
{
if (base[3] == 1)
{
score++;
base[3] = 0;
}
if (base[2] == 1)
{
base[3] = 1;
base[2] = 0;
}
if (base[1] == 1) base[2] = 1;
base[1] = 1;
}
else if (aa == 2)
{
if (base[3] == 1)
{
score++;
base[3] = 0;
}
if (base[2] == 1)
{
score++;
base[2] = 0;
}
if (base[1] == 1)
{
base[1] = 0;
base[3] = 1;
}
base[2] = 1;
}
else if (aa == 3)
{
if (base[3] == 1)
{
score++;
base[3] = 0;
}
if (base[2] == 1)
{
score++;
base[2] = 0;
}
if (base[1] == 1)
{
score++;
base[1] = 0;
}
base[3] = 1;
}
else if (aa == 4)
{
score++;
if (base[1] == 1) score++;
if (base[2] == 1) score++;
if (base[3] == 1) score++;
base[1] = 0;
base[2] = 0;
base[3] = 0;
}
else if (aa == -1)
{
out++;
if (out == N)
{
cout << score << "\n";
break;
}
if (out % 3 == 0)
{
base[1] = 0;
base[2] = 0;
base[3] = 0;
}
}
}
if (out == N)
{
break;
}
}
}
留言
張貼留言