2007年度 EPOCH@まつやま予選問題 問3
From Usipedia
予選落ちした高校生によるしょぼい回答です.反面教師にするといいかもしれません.
たぶん敗因は以下の事が考えられます
- コメントが適当すぎる(EPOCH@まつやまではコメントも評価対象)
- xplus()とyplus()が力技すぎる
ソースコード
#include <iostream> using namespace std; int s[6]={2,4,6,3,1,5}; // 初期のサイコロの状態 //最適化(移動マス数を1から4の間に収める) int best(int a) { while(a<0) a += 4; return a%4; } //n回x+1する void xplus(int n) { int swap; while(n--){ swap = s[0]; s[0] = s[1]; s[1] = s[5]; s[5] = s[3]; s[3] = swap; } } //n回y+1する void yplus(int n) { int swap; while(n--){ swap = s[0]; s[0] = s[2]; s[2] = s[5]; s[5] = s[4]; s[4] = swap; } } int main(void) { int ncom; cin >> ncom; if(ncom <= 0 || ncom > 1000) return 1; char com; int move, x=0, y=0; while(ncom--){ cin >> com >> move; if(com == 'x'){ x += move; xplus(best(move)); } if(com == 'y'){ y += move; yplus(best(move)); } } cout << "(" << x << "," << y << ") ... " << s[0] << endl; return 0; }