首页 > 华为0819笔试第一题100%第二题60%第三题0%
头像
叫我小熊吧
编辑于 2020-08-19 21:55
+ 关注

华为0819笔试第一题100%第二题60%第三题0%

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) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐