2009-09-24
SRM449
09.23+.2009
| DIV | level | 問題名 | 競技中 | 後で | System Test | 通過率 | 備考 | 
|---|---|---|---|---|---|---|---|
| 1 | 250 | MaxTriangle | o | - | - | 174.22pts | |
| 1 | 550 | HexagonalBattleField | 間に合わず | - | - | - | |
| 1 | 950 | StairsColoring | 開いてちょっと考えた | - | 
250点問題: MaxTriangle
- 2辺の長さの可能な全組合せについて、向き全パターンを試しても大丈夫
- 辺の長さが1の場合が抜けてて焦った
- 174.22points (20'43'')
#define sz(a)  int((a).size())
#define pb  push_back
#define all(c)  (c).begin(),(c).end()
#define tr(c,i)  for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); i++)
#define rep(var,n)  for(int var=0;var<(n);var++)
#define found(s,e)  ((s).find(e)!=(s).end())
class MaxTriangle {
  double s(int v1x, int v1y, int v2x, int v2y) {
    return 0.5 * abs(v1x * v2y - v1y * v2x);
  }
 public:
  double calculateArea(int A, int B) {
    int i;
    map<int,int> sq;
    sq.clear();
    for(i=0;i<=44721;i++) { sq[i*i]=i; }
    set<pair<int,int> > ai, bi;
    ai.clear(); bi.clear();
    
    for(i=0;i<=A;i++) {
      int i2=i*i; if (i2 > A) break;
      int j2=A-i2; if (!found(sq,j2)) continue;
      int j=sq[j2];
      ai.insert(make_pair(i,j));
    }
    if (sz(ai)==0) return -1;
    for(i=0;i<=B;i++) {
      int i2=i*i; if (i2 > B) break;
      int j2=B-i2; if (!found(sq,j2)) continue;
      int j=sq[j2];
      bi.insert(make_pair(i,j));
    }
    if (sz(bi)==0) return -1;
    double smax=0, s_;
    tr(ai,at){
      int ax=at->first, ay=at->second;
      tr(bi,bt){
        int bx=bt->first, by=bt->second;
        for(int a0=-1;a0<=1;a0+=2)
          for(int a1=-1;a1<=1;a1+=2)
            for(int b0=-1;b0<=1;b0+=2)
              for(int b1=-1;b1<=1;b1+=2) {
                s_ = s(a0*ax,a1*ay,b0*bx,b1*by);
                if (s_ > smax) smax = s_;
              }
      }
    }
    
    return smax;
  }
};
			550点問題: HexagonalBattleField
- ネットワークのどの辺を取ってどの辺を捨てて・・・とか考えててDPっぽい無理コード書いてて訳分からん
950点問題: TheCardLineDivOne
- 550が訳分からないので開いてみた。どっちを解くか考えたけど色の塗り分けに尻込みした。ProjectEulerならありがちな問題だと思うんだけど
Challenge Time
- 落としも落とされもせず
174.22点。部屋で5位, Div1では 261/846
1419→1503 (+84) 4度目の青→黄色。そろそろ黄色で安定したい
追記。yeharaさんから激励のメッセージを頂きました。とりあえず1600を目指したいです。
コメント
	トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/n4_t/20090924
		
	


 


