SRM 459 DIV2
簡単だったのに何故かできなかったorz
250pt submit
500pt compile
1000pt opened
rate 896 -> 874 (-22)
250pt
Easy - RecursiveFigures
173.43 / 250
class RecursiveFigures { public: double getArea(int sideLength, int K) { double ret = 0.0; double r = (double)sideLength/2.0; ret = r*r*PI; for(int i=1;i<K;i++){ r/=sqrt(2.0); ret -= (4*r*r - r*r*PI); } return ret; } };
計算式をたてるのが下手というか、体調不良ということにしてくだしあ。
500pt
Medium - Inequalities
問題を理解した。と思ったら、実は微妙に理解できてなかった。
複雑に捉えてしまったようで時間内には解けず。
範囲に収まれば良いから、小数点部分も考慮したデータ構造で素直にループ回すだけ。
浮動小数点は怖いので、整数を2倍して拡張しただけのコードが下。
class Inequalities { public: int maximumSubset(vector <string> ine) { vector<string> kigo; int num[ine.size()]; int X[2048]; memset(X,0,sizeof(X)); for(int i=0;i<ine.size();i++){ stringstream ss(ine[i]); string str; int f; for(int j=0;ss>>str;j++){ if(isdigit(str[0])) f=j,num[i] = atoi(str.c_str()); else if(str != "X") kigo.push_back(str); } if(f==0){ if(kigo[i]=="<=")kigo[i]=">="; else if(kigo[i]=="<")kigo[i]=">"; else if(kigo[i]==">")kigo[i]="<"; else if(kigo[i]=="<=")kigo[i]=">="; } } for(int i=-1;i<2048;i++){ for(int j=0;j<ine.size();j++){ if(kigo[j]=="<="){ if(i <= 2*num[j])X[i+1]++; }else if(kigo[j]=="<"){ if( i < 2*num[j])X[i+1]++; }else if(kigo[j]=="="){ if( i == 2*num[j])X[i+1]++; }else if(kigo[j]==">"){ if( i > 2*num[j])X[i+1]++; }else if(kigo[j]==">="){ if( i >= 2*num[j])X[i+1]++; } } } int ans = 0; for(int i=0;i<2048;i++)ans = max(ans,X[i]); return ans; } };