るくすの日記 ~ Out_Of_Range ~

主にプログラミング関係

SRM 540 Div2

250: RandomColoringDiv2

やるだけ

class RandomColoringDiv2 {
public:
  int getCount(int maxR, int maxG, int maxB, int startR, int startG, int startB, int d1, int d2) {
    int result = 0;
    rep(r,maxR){
      rep(g,maxG){
	rep(b,maxB){
	  int dr = abs(r - startR);
	  int dg = abs(g - startG);
	  int db = abs(b - startB);
	  if(dr <= d2 && dg <= d2 && db <= d2 && (dr >= d1 || dg >= d1 || db >= d1)) result++;
	}
      }
    }	    
    return result;
  }
};

500: ImportantSequence

分からなかったのでカンニング。 上限と下限を求めていけば個数が求まるらしい。なるほどなー


class ImportantSequence {
public:
  int getCount(vector <int> B, string operators) {
    ll lb = 1,ub = INF;
    rep(i,B.size()){
      if(operators[i] == '+'){
	ll tub = ub,tlb = lb;
	ub = B[i] - tlb;
	lb = max(B[i] - tub,1LL);
      }else{
	ub = ub - B[i];
	lb = max(1LL,lb - B[i]);
      }
      if(lb > ub) return 0;
    }
    if(ub - lb > (1LL << 40)) return -1;    
    return (int)(ub - lb + 1);
  }

};