2007年度 EPOCH@まつやま予選問題 問3

From Usipedia
Jump to: navigation, search

予選落ちした高校生によるしょぼい回答です.反面教師にするといいかもしれません.

たぶん敗因は以下の事が考えられます

  • コメントが適当すぎる(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;
 }
Namespaces
Variants
Views
Actions
Categories