题目来源: http://community.topcoder.com/stat?c=problem_statement&pm=11035&rd=14236
这道题目在TopCoder的比赛的数据中正确率不到%10, 我一开始觉得题目挺简单, 就是一个简单的排列组合问
题, 但做完提交后, system test 挂掉了, 一看挂掉的测试数据, 原来是当参数numFriends为1的时候, 计算行和列
的时候会重复, 要除以2才是正确结果. 或当numFriends为1的时候只考虑行或只考虑列.
题目给出的样例测试数据中没有包含这种情况, 大部分人都忽略了考虑这种情况, 所以才有这超低的正确率.
代码如下:
#include <string> #include <vector> using namespace std; /************** Program Begin *********************/ /** * calculate A(n, m) */ long long calc(int m, int n) { long long sum = 1; for (int i = 1; i <= m; i++) { sum *= n; --n; } return sum; } class MovieSeating { public: long long getSeatings(int numFriends, vector <string> hall) { long long res = 0; for (int i = 0; i < hall.size(); i++) { int seats = 0; for (int j = 0; j < hall[i].size(); j++) { if ('.' == hall[i][j]) { ++seats; } } if (seats >= numFriends) { res += calc(numFriends, seats); } } if (numFriends > 1) { for (int i = 0; i < hall[0].size(); i++) { int seats = 0; for (int j = 0; j < hall.size(); j++) { if ('.' == hall[j][i]) { ++seats; } } if (seats >= numFriends) { res += calc(numFriends, seats); } } } return res; } }; /************** Program End ************************/
作者:xuzhezhaozhao 发表于2013-7-19 13:18:43 原文链接
阅读:63 评论:0 查看评论