解いた問題

ラベル TCO の投稿を表示しています。 すべての投稿を表示
ラベル TCO の投稿を表示しています。 すべての投稿を表示

5/13/2012

TCO2012 2B

参加記録

華麗に0完

300:
0〜N-1と1〜Nを間違えた。

550:
開いてない

900:
開いてない

4/22/2012

TCO2012 2A

参加記録。何も出来なかった。

300 :
2部マッチングして正当性を確かめるまでは思い浮かんだけど
log2 で分類しきれるという所に最後まで気がつかなかった。
もっとシンプルな方法で解いてる人がいるけど、あれは何をやっているのか・・・。

450 :
読んだだけ。

1000 :
開いてない。

4/08/2012

TCO2012 1B

参加記録。通過したけど、残念な結果。

250 :
やるだけ。やるだけにも関わらずFailedSystemTest。

500 :
メモ化した。memo[区間の先端][区間の終端][今何匹か]
貪欲とか2分探索みたいな解法の人もいた。

1000 :
読んでない。


4/01/2012

TCO2012 1A

参加記録。惨敗

250 :
全部試す。
ソートを忘れて再提出。

500 :
AとBが等しくなる場合はたぶん無い。素数を分母か分子に振り分けるパターン数 / 2。
__builtin_popcountにlong long int を使ってシステムテストで落ちる。

1000 :
ざっと読んだだけ。

5/25/2011

TCO2011 Qual3

参加記録。

250
Failed System Test

500
 class CoinMachinesGame {
public:
  int maxGames(int c, vector <int> need, vector <int> give) {
    int cnt = 0;

    while( true ){
      int tmp = c;

      const int size = need.size();
      int idx = 0;
      int mx = -(1 << 30 );
      for(int i=0; i<size; ++i){
        if( need[i] <= c ){
          if( mx < give[i] - need[i] ){
            idx = i;
            mx = give[i] - need[i];
          }
        }
      }

      int game = c / need[idx];
      c -= need[idx] * game;
      c += give[idx] * game;
      cnt += game;

      if( tmp == c )break;
    }

    return cnt;
  }
}; 
1000
class ComplementMachine2D {
public:
  int largestSubmatrix(vector <string> m) {

    int r = max( m.size(), m[0].size() );

    for(int begin=0; begin < m[0].size(); ++begin){
      for(int end = begin+1; end <= m[0].size(); ++end){

        for(int top = 0; top < m.size(); ++top){
          for(int bottom = top + 1; bottom <= m.size(); ++bottom){

            bool a, b;
            a = true;
            b = true;

            for(int i=begin; i<end; ++i){
              a = a && m[top][i] == m[bottom-1][i];
              b = b && m[top][i] != m[bottom-1][i];
            }

            if( !a && !b )break;

            r = max( r, (bottom - top) * (end - begin) );
          }
        }
      }
    }
    return r;
  }
};



250再挑戦
個数が多くて6個で、数値の範囲が1-15と小さいので、充分大きい数まで試せばいい。
class AllButOneDivisor {
public:
  int getMinimum(vector <int> v) {
    for(int n = 1; n < 100000; ++n){
      int cnt = 0;
      for(int i=0; i<v.size(); ++i){
        if( n % v[i] == 0 ) ++cnt;
      }
      if( cnt+1 == v.size() )return n;
    }
    return -1;
  }
};