suzu-log/g86

 | 

2008-04-21

LiosK問題2

23:51 | LiosK問題2 - suzu-log/g86 を含むブックマーク はてなブックマーク - LiosK問題2 - suzu-log/g86

サンプルが人数60人に対して問題数が10、さらに問題の上限と下限が全部同じなので、Greedyに全部やれば埋まるんじゃね?と思った。

#include <iostream>
using namespace std;

#define Fill(a, b) memset(a, b, sizeof(a))

int main() {

  bool opinion[60][10] = {
    {true,  true,  true,  true,  false, true,  true,  false, true,  true },
    {true,  false, true,  true,  false, true,  false, true,  true,  true },
    {false, true,  true,  true,  true,  true,  false, true,  true,  true },
    {true,  false, true,  true,  false, true,  false, false, true,  false},
    {true,  true,  false, false, false, true,  false, false, true,  true },
    {true,  false, true,  false, false, true,  false, false, true,  false},
    {true,  false, false, true,  false, false, false, false, false, true },
    {false, false, true,  true,  false, false, true,  true,  true,  false},
    {false, true,  false, false, true,  true,  true,  false, true,  true },
    {true,  false, true,  true,  true,  true,  true,  true,  false, true },
    {false, true,  false, false, true,  false, true,  false, true,  true },
    {true,  true,  true,  false, true,  false, true,  false, true,  true },
    {false, true,  true,  true,  true,  false, true,  true,  true,  true },
    {false, false, true,  false, false, false, true,  true,  true,  true },
    {true,  true,  true,  true,  false, true,  false, false, true,  false},
    {false, false, true,  false, false, true,  true,  false, false, true },
    {true,  true,  false, true,  false, true,  true,  true,  true,  true },
    {true,  false, false, false, true,  false, false, false, false, true },
    {false, true,  true,  true,  false, false, false, false, false, false},
    {false, true,  true,  false, false, false, false, true,  true,  false},
    {false, true,  false, false, false, false, false, false, true,  false},
    {true,  false, true,  true,  true,  false, true,  true,  false, true },
    {false, false, false, false, true,  true,  false, true,  true,  true },
    {false, true,  true,  true,  false, false, true,  true,  true,  true },
    {true,  false, false, false, true,  false, true,  true,  true,  false},
    {true,  true,  true,  true,  true,  true,  true,  false, false, false},
    {true,  false, true,  false, true,  false, true,  false, true,  true },
    {false, false, true,  false, false, false, false, false, false, true },
    {true,  false, true,  true,  false, true,  true,  false, false, true },
    {true,  true,  true,  true,  true,  true,  false, true,  false, true },
    {false, true,  true,  false, true,  false, false, false, false, true },
    {true,  true,  true,  true,  false, false, true,  true,  true,  true },
    {false, true,  true,  false, false, true,  false, false, true,  false},
    {true,  false, false, true,  true,  false, true,  false, true,  false},
    {true,  false, false, true,  true,  true,  true,  false, true,  true },
    {true,  true,  false, true,  true,  false, false, false, true,  true },
    {true,  false, true,  false, true,  true,  true,  false, true,  true },
    {true,  true,  false, false, true,  true,  true,  true,  true,  false},
    {true,  true,  false, false, true,  false, true,  true,  true,  false},
    {false, true,  true,  false, false, false, false, true,  false, true },
    {true,  true,  true,  true,  false, true,  true,  false, true,  true },
    {true,  false, true,  true,  true,  false, true,  true,  true,  true },
    {false, true,  false, false, false, true,  true,  false, true,  true },
    {true,  false, true,  true,  false, false, false, true,  false, true },
    {false, false, false, false, false, false, true,  false, true,  false},
    {false, false, true,  false, false, true,  true,  true,  true,  true },
    {false, true,  true,  true,  true,  true,  false, false, false, false},
    {true,  true,  false, false, true,  false, true,  false, false, false},
    {true,  false, true,  true,  false, false, true,  true,  false, true },
    {false, false, false, false, false, false, false, true,  false, true },
    {false, false, false, false, true,  true,  false, false, true,  false},
    {true,  true,  true,  true,  true,  true,  false, false, true,  false},
    {true,  true,  true,  true,  true,  true,  false, true,  true,  false},
    {false, false, false, true,  true,  false, false, false, false, true },
    {true,  false, false, false, false, true,  false, true,  true,  true },
    {false, false, false, false, false, false, true,  true,  false, true },
    {false, false, true,  false, true,  false, true,  true,  false, true },
    {true,  false, true,  true,  true,  true,  true,  false, true,  true },
    {true,  true,  false, false, true,  false, true,  true,  true,  true },
    {false, false, false, true,  true,  false, true,  true,  false, true }
  };

  int cap[10][2] = {
    {3, 5},
    {3, 5},
    {3, 5},
    {3, 5},
    {3, 5},
    {3, 5},
    {3, 5},
    {3, 5},
    {3, 5},
    {3, 5}
  };

  int mem[10];
  bool used[60];
  int wariate[60];
  Fill(used, false);
  Fill(mem, 0);
  Fill(wariate, -1);

  for (int i=0; i<60; i++) {
    for (int j=0; j<10; j++) {
      if (opinion[i][j] && mem[j] < cap[j][1] && wariate[i] == -1) {
	mem[j]++;
	used[i] = true;
	wariate[i] = j;
      }
    }
  }

  bool allFull = true;
  for (int j=0; j<10; j++) {
    if (mem[j] < cap[j][1]) {
      cout << "Exp No." << j << " is not satisfied : " << mem[j] << endl;
      allFull = false;
    }
  }
  if (allFull) {
    cout << "All Experiments are filled by max capacity";
  }

  return 0;
}

実行結果

/Users/suzukitomohiro/srm% ./a.out

All Experiments are filled by max capacity

サンプルデータなら、偶然全部の実験に5人を割り振れたよ!

めでたしめでたし?

LiosKLiosK2008/04/21 23:55おーーーーーー

さすが!

diouf21diouf212008/04/22 11:28なぜ話を振ってきたんだぁ><。
でも、やりたい!!!!!!

卒研テーマ決定が終わって学内の発表が終わったらやってみよぉ

HashHash2008/04/22 19:31レベル高すぐる><
でも初級者のウチからトップレベルを見るのは大切かもしれん

 |