C++競プロ学習日記(仮)

( 学習記録であり解説Blogではないです )

ARC021-A DEAD END|AtCoder

A: DEAD END - AtCoder Regular Contest 021 | AtCoderを解きました!

#include <bits/stdc++.h>
using namespace std;
int main() {
	int a, n{16};
	vector<int> vc;
	bool flag=false;
	while(cin>>a){vc.push_back(a);}
        for(int i=0; i<n; i++){
		if(i==0||i==4||i==8||i==12){
			if(vc[i]==vc[i+1]||vc[i]==vc[i-4]||vc[i]==vc[i+4]){flag=true;}
		}else if(i==3||i==7||i==11||i==15){
			if(vc[i]==vc[i-1]||vc[i]==vc[i+4]||vc[i]==vc[i-4]){flag=true;}
		}else{
			if(vc[i]==vc[i+1]||vc[i]==vc[i-1]||vc[i]==vc[i+4]||vc[i]==vc[i-4]){flag=true;}
		}
	}
	cout << (flag?"CONTINUE":"GAMEOVER") << endl;
	return 0;
}

この問題「2048」という数値パズルゲームが元となった問題だった様で。
そのゲームを全く知らず、問題のイメージが掴めず手付かずだった。
(多分ゲームを知らなくても解けるんですけど、イメージが掴めないと遠のく...)
で、先日数強フォロワーさんと一緒に2048して遊ぶ機会があって
イメージが掴めたので早速考えて解いてみた!
凄いダメそうなコードで...場合分けしか思いつかなかった...。
(おまけに参照外アクセスをしているかも知れない...)
なので後日強い人のコードを見て復習します。

今回は4*4のマスだけど、本当は一般化出来ていた方が良さそうな気もする...。