1.力扣顺时针打印矩阵的题很像,加个判断就行
2.某一层的结点数量为cur,上一层为pre,那么能生成的二叉树就为:2*pre里面选cur种,即
不知道代码为啥不过。。我也判断了是否cur>2*pre
麻烦大佬帮着看看。
const int mod = 1e9 + 7; long long sum(int i, int n) { if (i == 0 || i == n)return 1; if (i == 1 || i == n - 1)return n; if (i>n / 2)i = n - i; long long up = 1, bt = 1; for (int k = i; k >= 2; k--) { bt *= k; } for (int k = n; k >= n - i + 1; k--) { up *= k; } return up / bt; } int main() { int n; while (cin >> n) { vector<int> v(n); for (int i = 0; i<n; i++) { int num; cin >> num; v[i] = num; } sort(v.begin(), v.end()); vector<int> temp; int count = 1; for (int i = 1; i<n; i++) { if (v[i] != v[i - 1]) { temp.push_back(count); count = 1; } else { count++; } } temp.push_back(count); long long res = 1; int pre = temp[0]; int flag = 1; for (int i = 1; i<temp.size(); i++) { int cur = temp[i]; if (cur>2 * pre) { flag = 0; break; } res *= sum(cur, 2 * pre); pre = temp[i]; res %= mod; } if (!flag)cout << 0 << endl; else cout << res%mod << endl; } return 0; }
第三题俄罗斯方块,看着没啥思路就去想第二题去了 好像暴力模拟就行 有点难受。
全部评论
(3) 回帖