Hatena::ブログ(Diary)

hentekoのdev日記

2012-03-07

SRM536 Div2

レーティングが-102された。
けど気にしないもん……

250 (int h = tmp % 2;忘れて50分くらいかかった)

    int hoge(int n,int count,int d) {
        if(d == 0) { return 1; }
        if(d-1 == count) { return n;}
        return n * hoge(n,count+1,d);
    }

	int countRoots(vector <int> a) {
		int result = 0;

        if(a.size() == 1) {
            return 0;
        }

        for(int i = 0;i < 2;i++) {
            int tmp = 0;
            for(int j=0;j<a.size();j++) {
                tmp += a[j] * hoge(i,0,j);
            }
            int h = tmp % 2;
            if(h == 0) {
                result++;
            }
        }
		return result;
	}

500(本番解けなかった)

int minimumFaces(vector <string> rolls) {
		int result = 0;

        for(int i = 0;i < rolls.size();i++ ) {
            sort(rolls[i].begin(),rolls[i].end());
        }
        for(int i=0;i < rolls[0].size();i++) {
             int min_max = 0;
             for(int j=0;j < rolls.size();j++) {
               if(rolls[j][i] - 48 > min_max) min_max = rolls[j][i] - 48;
             }
             result += min_max;
        }

		return result;
	}

2012-03-01

SICP(計算機プログラムの構造と解釈)を買ったのでMac10.6.8にGaucheをインストール

SICP(計算機プログラムの構造と解釈)を買ったのでMac10.6.8にGaucheインストールしました。
amazon(http://www.amazon.co.jp/exec/obidos/ASIN/489471163X/)

始めはmakeとかでコンパイルしようかと思いましたが、何やらsqrtが使えない状況になったのでmacportsインストールしました。
以下コマンド

インストール
$ sudo port install gauche

実行
$ gosh

goshの終了方法
gosh > (exit)


簡単だね!!

追記:Mac OS X 10.7.2でも同様で確認

2012-02-10

SRM532 Div2 600

本番で解けなかった600問題を解いた。

#line 5 "DengklekMakingChains.cpp"
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <algorithm>
using namespace std;
class DengklekMakingChains {
public:
	int maxBeauty(vector <string> chains) {
        
        int full_max = 0,single_max = 0,side_max = 0;
        vector<string> side;
        bool flag = true;
        
        for (int i=0; i < chains.size(); i++) {
            if (chains[i][0] != '.' && chains[i][1] != '.' && chains[i][2] != '.') {
                int max = (int)(chains[i][0] - '0') + (int)(chains[i][1] - '0') + (int)(chains[i][2] - '0');
                full_max += max;
            }else if (chains[i][0] == '.' && chains[i][1] != '.' && chains[i][2] == '.') {
                int single = (int)(chains[i][1] - '0');
                if(single_max < single) {
					single_max = single;
				}
            }else if (chains[i][0] != '.' || chains[i][2] != '.') {
                side.push_back(chains[i]);
                flag = false;
            }
        }
		
        if (flag) {
            return max(single_max,(side_max + full_max));
        }
		
		
		if(side.size() == 1) {
			vector<int> num;
			
			num.push_back(0);
			int count = 0;
			for (int n=0; n < side[0].size(); n++) {
				if (side[0][n] != '.') {
					num[count] += (int)(side[0][n] - '0');
				}else {
					count++;
					num.push_back(0);
				}
			}
			
			vector<int>::iterator it = max_element( num.begin(), num.end() );
			if (side_max < *it) {
				side_max = *it;
			}
			
			return max(single_max,(side_max + full_max));
		}
		
		
        for (int i=0; i < side.size() - 1; i++) {
            for (int j=i+1; j < side.size(); j++) {
                for (int k=0; k < 2; k++) {
					string join = ""; 
                    if (k == 0) {
                        join = side[i] + side[j];
                    }else {
                        join = side[j] + side[i];
                    }
					vector<int> num;
					num.push_back(0);
					int count = 0;
					for (int n=0; n < join.size(); n++) {
						if (join[n] != '.') {
							num[count] += (int)(join[n] - '0');
						}else {
							count++;
							num.push_back(0);
						}
					}
					
					vector<int>::iterator it = max_element( num.begin(), num.end() );
					if (side_max < *it) {
						side_max = *it;
					}
                }
            }
        }
		
        
		return max(single_max,(side_max + full_max));
	}
    
};

Black and White boardが総インストール1万超えました!!

Android専用アプリとしてマーケットにて公開中の、
Black and White boardの総インストール数が1万超えました!!

インストールしてくださった皆様、ありがとうございます。
これからも開発の方を進めていきたいと思っております。

https://market.android.com/details?id=com.henteko.teres.android.BaWboard

2012-02-09

SRMの為にメモ

今回、SRM532に挑戦してみた結果、文字列整数に直したり逆をするのに手こずりました。
ですのでそれをまとめて置きたいと思います。
ちなみに、まだXcode3を使っているので次回までにXcode4にしたいと思います。

stringからintへ変換

int num = (int) string_hoge - '0';

intからstringへ変換

int sum = 5;
stringstream ss;
ss << sum;
string s = ss.str();

stringからconst *charへ変換

string s = "hoge";
const char* p_str;
p_str = s.c_str();
char* c = *p_str;  

//2012/3/7追記
charからint

int n = c - 48;

vectorのsort

//charもsortできるよ!!!!!!!!!(SRM536Div2 500問題より)
sort(data.begin(),data.end());

TopCoder SRM532 Div2

TopCoder SRMに初挑戦してみました。
解けた問題はDvi2の250問題です。
Easy問題って言うのかな?

結果は177点くらいとって、レーティング845の灰色です。
次は緑に昇格できるよう、がんばります。

とりあえずソースコード

// BEGIN CUT HERE

// END CUT HERE
#line 5 "DengklekTryingToSleep.cpp"
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
using namespace std;
class DengklekTryingToSleep {
public:
	int minDucks(vector <int> ducks) {
		
		//sortする
		sort(ducks.begin(), ducks.end()); 
		
		int min = ducks[0];
		int max = ducks[ducks.size() - 1];
		
		int count_row = 0;
		int count = 0;
		
		for (int i=min; i <= max; i++) {
			if (i == ducks[count_row]) {
				count_row++;
			}else {
				count++;
			}
		}
		
		return count;
	}
	
	// BEGIN CUT HERE
public:
	void run_test(int Case) { if ((Case == -1) || (Case == 0)) test_case_0(); if ((Case == -1) || (Case == 1)) test_case_1(); if ((Case == -1) || (Case == 2)) test_case_2(); if ((Case == -1) || (Case == 3)) test_case_3(); if ((Case == -1) || (Case == 4)) test_case_4(); }
private:
	template <typename T> string print_array(const vector<T> &V) { ostringstream os; os << "{ "; for (typename vector<T>::const_iterator iter = V.begin(); iter != V.end(); ++iter) os << '\"' << *iter << "\","; os << " }"; return os.str(); }
	void verify_case(int Case, const int &Expected, const int &Received) { cerr << "Test Case #" << Case << "..."; if (Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "\tExpected: \"" << Expected << '\"' << endl; cerr << "\tReceived: \"" << Received << '\"' << endl; } }
	void test_case_0() { int Arr0[] = {5, 3, 2}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 1; verify_case(0, Arg1, minDucks(Arg0)); }
	void test_case_1() { int Arr0[] = {58}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 0; verify_case(1, Arg1, minDucks(Arg0)); }
	void test_case_2() { int Arr0[] = {9, 3, 6, 4}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 3; verify_case(2, Arg1, minDucks(Arg0)); }
	void test_case_3() { int Arr0[] = {7, 4, 77, 47, 74, 44}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 68; verify_case(3, Arg1, minDucks(Arg0)); }
	void test_case_4() { int Arr0[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; vector <int> Arg0(Arr0, Arr0 + (sizeof(Arr0) / sizeof(Arr0[0]))); int Arg1 = 0; verify_case(4, Arg1, minDucks(Arg0)); }
	
	// END CUT HERE
	
};

// BEGIN CUT HERE
int main() {
	DengklekTryingToSleep ___test;
	___test.run_test(-1);
}
// END CUT HERE