Hatena::Grouptopcoder

blu_rayの日記

2011-07-22

Codeforces Beta Round #78 Div2

| 03:44

oox--

A. Help Far Away Kingdom

rubyのリファレンスマニュアルみながら。

B.Help Chef Gerasim

複数のジュースの移動は考えなくていいので書くだけ。

C.Help Victoria the Wise

場合分けで考えて泥沼に嵌った。

Pretestが通ったので油断してたら終了5分前にHackでそのまま時間切れ。

System Testが始まる前に出来てそうな人のを見る .. 回転させてみて重なるかどうか見るのが実装簡単そうなので試す .. できた。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <set>
using namespace std;

#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n) REP(i,0,n)

char c[6];
char cc[6];   // コピー用

// xyと平行に回転させる
void cc_rotate_xy() {
  char t = cc[1];
  cc[1] = cc[4];
  cc[4] = cc[3];
  cc[3] = cc[2];
  cc[2] = t;
}

// yzと平行に回転させる
void cc_rotate_yz() {
  char t = cc[0];
  cc[0] = cc[1];
  cc[1] = cc[5];
  cc[5] = cc[3];
  cc[3] = t;
}

// xzと平行に回転させる
void cc_rotate_xz() {
  char t = cc[0];
  cc[0] = cc[4];
  cc[4] = cc[5];
  cc[5] = cc[2];
  cc[2] = t;
}

int main(int argc, char *argv[]) {
  scanf("%s",c);
  sort(c,c+6);
  
  set<string> log;
  string temp;
  do {
    rep(i,6) cc[i] = c[i];
    // 3種類の回転の組み合わせ(64通り)を考える
    bool flag = true;
    rep(i,4) {
      cc_rotate_xy();
      rep(j,4) {
        cc_rotate_yz();
        rep(k,4) {
          cc_rotate_xz();
          temp = "";
          rep(k,6) temp += cc[k];
          if (log.count(temp)) flag = false;
        }
      }
    }
    // 存在しなければ追加
    if (flag) log.insert(temp);
  } while (next_permutation(c,c+6));
  
  cout<<log.size()<<endl;
  return 0;
}

Pretestのinputみたけどザルすぎる…。

D.Help King

コインがどう関係してくるのかさっぱり。

E.Help Greg the Dwarf

みてない。

Dのおかげでunrated回になった模様。

tatuyan_edsontatuyan_edson2011/07/23 12:47はじめまして。
やはり、Dはコインがどう関係してくるのかわからない問題でしたか。
何人かで読んでも、そもそも問題の意図がつかめず'?'だったので、unratedになるのは仕方ないかも知れませんね。

blu_rayblu_ray2011/07/23 18:45どうもはじめまして。
>unratedになるのは仕方ないかも知れませんね。
そうですね。一日経ちましたが未だによく分かりません。