Codeforces #48 A "Cheaterius's Problem"

問題:http://codeforces.com/contest/51/problem/A

参加形式:本番

2×2の正方形があって各マスに数字がふってある.回転させて同じ位置に同じ数字がくるものを一つとして数えると,入力された2×2の正方形群は何個として数えられるか.

途中から参加して時間がなかったため簡単に実装しようとしてHashSetを使おうとしたが,HashSetによるオブジェクトの分類をhashcodeだかequalsだか忘れたのでとりあえずequalsを実装するだけという中途半端な実装になってしまった.

import java.util.*;

public class A_CheateriussProblem {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		Set<Amulet> set = new HashSet<Amulet>();
		int result = 0;
		for (int n = s.nextInt(); n-- > 0;) {
			s.nextLine();
			String x = s.nextLine(),y = s.nextLine();
			Amulet a = new Amulet(x + y.charAt(1) + y.charAt(0));
			boolean b = true;
			for(Amulet am : set){
				if(a.equals(am)){
					b = false;
				}
			}
			if(b){
				set.add(a);
				++result;
			}
		}
		System.out.println(result);
	}

	static class Amulet {
		String str;
		
		public Amulet(String str) {
			this.str = str;
		}
		
		@Override
		public boolean equals(Object obj) {
			Amulet other = (Amulet) obj;
			for(int i = 0; i < str.length(); ++i){
				if(other.str.equals(str.substring(i)+str.substring(0,i))){
					return true;
				}
			}
			return false;
		}

	}
}