srm538 div1
2012-04-06 02:25
417 查看
250pt 水题不写了。
500pt
由于顺序可以随便调整,因此肯定会把向前的合并在一起,向后的合并在一起,然后按照所有可行的角度进行旋转,找出最远距离即可(最接近 180°的就是答案的角度)。
求出所有可行角度DP即可。
在精度问题上卡了好久,mark一下。
1050pt 不会做,超出能力范围了。
500pt
由于顺序可以随便调整,因此肯定会把向前的合并在一起,向后的合并在一起,然后按照所有可行的角度进行旋转,找出最远距离即可(最接近 180°的就是答案的角度)。
求出所有可行角度DP即可。
在精度问题上卡了好久,mark一下。
class TurtleSpy { public: vector<int> deg; int da,db; int getNum(string str,int pos) { int tmp = 0; for(int i = pos;i < str.length();i++) tmp = tmp * 10 +(str[i]-'0'); return tmp; } int absx(int x) { return x < 0 ? -x:x; } double maxDistance(vector <string> commands) { //$CARETPOSITION$ double pi = acos(-1.0); deg.clear(); da = db = 0; for(int i = 0;i < commands.size();i++) { switch(commands[i][0] ) { case 'l': deg.push_back(getNum(commands[i],5)); break; case 'r': deg.push_back(360-getNum(commands[i],6)); break; case 'f': da += getNum(commands[i],8); break; case 'b': db += getNum(commands[i],9); } } int minDeg = 360; bool dp[55][370]; memset(dp,0,sizeof(dp)); dp[0][0] = 1; for(int i = 0;i < deg.size();i++) for(int j = 359;j >= 0;j--) if(dp[i][j] == 1) { dp[i+1][j] = 1; dp[i+1][(j+deg[i]) % 360] = 1; } for(int i = 0;i < 360;i++) if(dp[deg.size()][i] == 1 && minDeg > absx(i - 180)) minDeg = absx(i - 180); minDeg = 180-minDeg; double ans = sqrt(1.0*da*da+1.0*db*db-cos(1.0*minDeg / 360 *2* pi)*2*da*db); return ans; } };
1050pt 不会做,超出能力范围了。
相关文章推荐
- SRM538-div2-3-SkewedPerspectives
- SRM SRM 538 DIV2
- SRM 538 div2
- SRM538-div1-2-TurtleSpy
- SRM538-div1-3-SkewedPerspective
- SRM538-div1-2-div2-3-EvenRoute
- TC SRM 570 div2 1000【Tree,树上统计】
- 最小公倍数 SRM 661 Div1 250: MissingLCM
- srm 654 div2 1000 (DP,最大连续和拓展, 有亮点)
- StrangeDictionary(SRM542-div2-3)
- topcoder SRM 654 DIV2 1000 SuccessiveSubtraction2 题解(dp)
- SRM 440 DIVII 250中文翻译及源码(C#)
- srm 543 div1
- SRM 542 DIV2
- SRM 590 DIV1 B题 XorCards ---- 高斯消元法
- topcoder srm 335 div1
- SetAndSet(SRM545-div1-3)
- TC SRM 547 div2
- topcoder srm 320 div1
- TopCoder SRM 677 Div. 2 550 - FourStrings (枚举)