爱奇艺算法岗笔试编程题

1.输入N,然后 输入大小为N-1的数组A,只包含0和1;现在对1到N的元素进行排序得到数组P,要求:
如果 对所有A[i]=0, 有P[i] < P[i+1]; 所有A[i]=1, P[i] > P[i+1].
这样的排列是一个有效的排列,找到符合要求的有效排序的个数。输出排列个数对 (10^9+7)的模。
#include <iostream>
#include<math.h>
#include<vector>
#include<algorithm>
using namespace std;

bool isValidPerm(vector<int>& perms, vector<int>& standards) {
	for (int i = 0; i < standards.size(); i++) {
		if (standards[i] == 0) {
			if (perms[i] >= perms[i + 1])
				return false;
		}
		else if(standards[i] == 1) {
			if (perms[i] <= perms[i + 1])
				return false;
		}
	}
	return true;
}

void numberOfPermutations() {
	int N;
	cin >> N;
	long long cnt = N-1;
	int val;
	vector<int> standards, perms;
	while (cnt--) {
		cin >> val;
		standards.push_back(val);
	}
	cnt = 1;
	while (cnt <= N) {
		perms.push_back(cnt);
		cnt++;
	}
	cnt = 0;
	do {
		if (isValidPerm(perms, standards))
			cnt++;
	} while (next_permutation(perms.begin(), perms.end()));

	cout << (cnt % static_cast<long long>(pow(10.0, 9) + 7)) << endl;
}

int main() {
	numberOfPermutations();
	return 0;
}

2.有n个红球和m个蓝球,A,B,C三个人,轮流不放回的取出一个球。若A取到红球则A胜利,若B取到红球则B胜利,C只负责取球捣乱,不参与胜负。若最后全部球取完后A没有拿到 红球,则B胜利,求A胜利的概率。
输入:m,n
输出:A胜利的概率,保留5位小数(补零)
#include <iostream>
#include <iomanip>
using namespace std;

double res = 0;
void winProbality(double m, double n, double& lastRoundNotWin) {
	if (m + n <= 0) return;
	if (m < 0 || n < 0) return;

	double total = m + n;
	double curRoundWin = 0;
	curRoundWin = lastRoundNotWin * (double(n) / total); //当前这轮胜利
	res += curRoundWin;

	lastRoundNotWin = m / total * (--m / --total); //A没赢,B没赢
	double dir1 = lastRoundNotWin * (m - 1) / (total - 1);//C选了m
	winProbality(m - 1, n, dir1);

	double dir2 = lastRoundNotWin * n / (total - 1); //C选了n
	winProbality(m, n - 1, dir2);
}
void solution() {

	double m, n;
	cin >> m >> n; // blue red

	double lastRoundNotWin = 1;
	res = 0;
	winProbality(m, n, lastRoundNotWin);

	cout.setf(ios::fixed);
	cout << fixed << setprecision(5) << res << endl;
}

int main() {
	solution();
	return 0;
}

第一题AC 36%,第二题AC 9%,大佬能否告诉下问题出在哪???

#爱奇艺##笔试题目##题解##算法工程师#
全部评论
第一题 leetcode 903
点赞 回复 分享
发布于 2019-09-08 17:35
第二题AC了,就是一个模拟的过程,f[n][m]表示n个红球m个蓝球是A获胜的概率,然后转移到f[n][m-3]或者f[n-1][m-2],分别乘上两者对应的概率即完事。
点赞 回复 分享
发布于 2019-09-09 08:38
第一题超时啊…我第一题也是ac36,它是内存超了
点赞 回复 分享
发布于 2019-09-09 08:52
我VS上测试用例能过,但leetcode却提示溢出出错了,有人遇到这种情况吗
点赞 回复 分享
发布于 2019-09-08 19:58
第一题既然都取模了,暴力肯定过不了啊😂
点赞 回复 分享
发布于 2019-09-08 19:05
第二题过了91%  int main() {     int n = 0, m = 0; // red blue     cin >> n >> m;     vector<vector<double>> dp(n + 1, vector<double>(m + 1, 0));     for (int j = 0; j <= m; ++j) {         dp[0][j] = 0;     }     for (int i = 0; i <= n; ++i) {         dp[i][0] = 1;         dp[i][1] = i / (i + 1.0);     }     for (int i = 1; i <= n; ++i) {         for (int j = 2; j <= m; ++j) {             double ns = i, ms = j;             double all = i + j;             double res = (ns) / all;             if (j >= 3) {                 dp[i][j] = res + (ms / all) * (ms - 1) / (all - 1) *                        ((ms - 2) / (all - 2) * dp[i][j - 3] + (ns / (all - 2)) * dp[i - 1][j - 2]);             } else if (j == 2) {                 dp[i][j] = res + (ms / all) * ((ms - 1) / (all - 1)) * (ns / (all - 2)) * dp[i - 1][j - 2];             }         }     }     cout << setiosflags(ios::fixed) << setprecision(5) << dp[n][m];     return 0; }
点赞 回复 分享
发布于 2019-09-08 17:44
可能是超时了
点赞 回复 分享
发布于 2019-09-08 17:34
第一题我最开始也想暴力全排列再判断,但是超时了🤣只能36
点赞 回复 分享
发布于 2019-09-08 17:33
开发岗也是这两道题
点赞 回复 分享
发布于 2019-09-08 17:28
我第一题也是36……不知道咋回事,感觉没问题啊😂
点赞 回复 分享
发布于 2019-09-08 17:23

相关推荐

03-27 17:33
门头沟学院 Java
代码飞升:同学院本,你要注意hr当天有没有回复过,早上投,还要打招呼要推销自己,不要一个劲投
点赞 评论 收藏
分享
点赞 评论 收藏
分享
暑期是进不了大厂了想问问前端友友们&nbsp;,后面应该如何沉淀自己,我想秋招再冲一下尤其是八股,应该抓哪一块是重点,理解到什么程度呢,要学到什么深度才能抗住拷打。还有场景题如何去准备。期待友友们的解答。
命烈焰带我飞走:找个中厂小厂先看看吧,去了熟悉熟悉项目,简历上扒点东西,之后刷刷sobb上百度美团快手的日常实习,流程都比较快轮次也少,别给自己太大压力,一步一步来,先不用想着暑期,转正,秋招那些事情,另外如果可能的话可以关注下面试时候的形象,穿搭,环境这些,其实实习主要就是看个眼缘,看着好看声音好听其实加分不少..八股这些不要死记硬背,挨个拿去问问chatgpt,这个东西做出来是为了解决什么问题,有啥效果,自己有想法有个模糊的概念就可以了,人家也知道你是学生,实习生没有什么kpi,放你去面都是希望能把你招进去的,场景题算法题没做过你可以边试着写边跟面试官说你的想法思路,也可以直说没见过让他们给你提示,反正最后都是与或非顺序分支循环存取值那套。总之建议是别为了秋招..出去旅旅游放松放松,少投几家少背八股多写写代码
点赞 评论 收藏
分享
评论
1
16
分享

创作者周榜

更多
牛客网
牛客企业服务