幼い頃からC++を学びましょう!Luogu C++ の学習および試験準備プロセス中に尋ねられた質問をすべて記録し、あらゆる瞬間を記録します。
まとめ記事を添付します:LuoguのC++言語 | まとめ_プログラミング大好きコミュニケーターのブログ - CSDNブログ
[タイトル説明]
じゃんけんは一般的な推測ゲームです。じゃんけんはじゃんけんに勝ち、はさみは紙に勝ち、紙はじゃんけんに勝ちます。二人が同じパンチを打った場合、勝者はありません。ジャンケン ゲームの最新バージョンは、ビッグバン セオリー シーズン 2 エピソード 8 に登場しました。
ゲームのアップグレード版では、従来のじゃんけんゲームに 2 つの新しいジェスチャーが追加されています。
スポック:『スタートレック』の主人公の一人。
リザードマン:『スタートレック』に登場する悪役。
これら 5 つのジェスチャーの勝敗関係は、A と B の間のゲームの結果をリストした表 1 に示されています。
さて、小さな A と小さな B は、このアップグレードされたバージョンの推測ゲームをプレイしてみます。それらのパンチは周期的なパターンに従うことが知られていますが、周期の長さは必ずしも等しいわけではありません。例: A 君が長さ 6 の「じゃんけん - じゃんけん - トカゲ男 - スポック」のサイクルでパンチする場合、彼のパンチのシーケンスは「じゃんけん - じゃんけん - トカゲ男 - スポック」になります。 -じゃんけん-じゃんけん-リザード-マン-スポック-...」、そしてリトル B が長さ 5 の「はさみ-じゃんけん-スポック-リザードマン」のサイクルでパンチした場合、シーケンスは次のようになります。彼のパンチの種類は「ハサミ-ジャンケン-スポック-リザードマン-チョキ-ジャンケン-スポック-リザードマン-...」です。
リトル A とリトル Bは合計N回の推測ゲームを実行したことが知られています 。勝者が 1 ポイントを獲得するたびに、敗者は 0 ポイントを獲得し、引き分けの場合は両方とも 0 ポイントを獲得します。ここで、 N回推測し た後の 2 人の得点を数えてください 。
【入力】
最初の行には 3 つの整数N、NA、NBが含まれており、それぞれ合計 N 回の推測、リトル A のパンチの周期の長さ、リトル B のパンチの周期の長さを表します。数字はスペースで区切ります。
2 行目には 、リトル A のパンチのパターンを示すNA 整数が含まれ、3 行目には、 リトル B のパンチのパターンを示すNB整数が含まれています。このうち、0は「ハサミ」、1は「ロック」、2は「紙」、3は「リザードマン」、4は「スポック」を意味します。数字はスペースで区切ります。
【出力】
それぞれ小さい A と小さい B のスコアを表す、スペースで区切られた 2 つの整数を含む行を出力します。
【入力サンプル】
10 5 6
0 1 2 3 4
0 3 4 2 1 0
【出力サンプル】
6 2
【詳しいコード説明】
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, na, nb, sa=0, sb=0, la[205], lb[205], ma=1, mb=1;
int a[5][5] = {
{0,-1,1,1,-1},
{1,0,-1,1,-1},
{-1,1,0,-1,1},
{-1,-1,1,0,1},
{1,1,-1,-1,0}};
cin >> n >> na >> nb;
for (int i=1; i<=na; i++) cin >> la[i];
for (int i=1; i<=nb; i++) cin >> lb[i];
for (int i=0; i<n; i++) {
int ra=la[ma],rb=lb[mb];
if (a[ra][rb]==1) sa++;
else if (a[ra][rb]==-1) sb++;
ma++;
mb++;
if (ma > na) ma = 1;
if (mb > nb) mb = 1;
}
cout << sa << " " << sb;
return 0;
}
【運用結果】
10 5 6
0 1 2 3 4
0 3 4 2 1 0
6 2