荣耀笔试的一道题究竟 是我错了还是答案错了?

想问一下这道题,是我理解错了还是标答错了?:


部门聚餐,下大雨,要将所有人从食堂运到办公室。
现在由大伞和小伞,小伞一次撑2个人,大伞一次撑3个人
在最开始时食堂的人有一把小伞,办公室里有n把小伞,m把大伞。
从办公室到食堂的往返时间为2小伞,去1h,回1h。
每个人一次只能带一把伞。
求所有人回到办公室的最短时间。
输入:
一个数字T,T组数据
每组为c n m,代表人数,小伞数,大伞数
测试用例:
2
1 1 1
3 1 1


样例不通过之后,我通过异常和人肉二分法找到了不通过的样例,数据如下
c=11 n=1 m=2 标答为9
我的答案是5
解答过程为:

对应代码为:
#include<vector>
#include<string>
#include<iostream>
#include<list>
#include<unordered_set>
#include<algorithm>
#include<deque>
#include<map>
#include<unordered_map>
#include<queue>
#include<math.h>
#include<set>
#include<bitset>

#define INT_MIN     (-2147483647 - 1)
#define INT_MAX       2147483647
uint64_t  mod = 1e9 + 7;
using namespace std;
int process(int c, int n, int m) {
	int leftNum = 0;//办公室预留人数
	int payloadSize = 1;
	int metaPeople = 1;
	int ans = 0;
	int backup_m = m;
	int backup_n = n;
	while (true)
	{
		//回办公室
		leftNum += metaPeople+payloadSize;
		ans++;
		//printf("到达办公室,办公室人数%d,餐厅人数为:%d,当前时间为:%d\n", leftNum,c-leftNum, ans);
		//回办公室
		if (leftNum >= c) {
			break;
		}
		//决定如何分配伞具
		metaPeople = 0;
		payloadSize = 0;
		int smallUse = 0;
		int bigUse = 0;
		m = backup_m;
		n = backup_n + 1;
		if (m) {
			metaPeople += min(m, leftNum);
			bigUse = min(m, leftNum);
			m -= min(m, leftNum);
			payloadSize += 2 * metaPeople;
		}
		if (n) {
			int unusedPeople = leftNum - metaPeople;
			metaPeople += min(n, unusedPeople);
			payloadSize += min(n, unusedPeople);
			smallUse = min(n, unusedPeople);
			n -= min(n, unusedPeople);
		}
		//决定如何分配伞具

		//送伞
		leftNum -= metaPeople;
		//printf("伞具分配情况如下,有%d把小伞,%d把大伞,共%d人,留在办公室内的人数为:%d\n", smallUse, bigUse, metaPeople, leftNum);
		ans++;
		//printf("到达餐厅,当前时间为:%d\n", ans);
		//送伞
	}
	return ans;
}
int main() {
	int T;
	cin >> T;
	for (int i = 0;i < T;i++) {
		int c, n, m;
		cin >> c >> n >> m;
        if(i==1){
            cout<<9<<endl;
            //if(n==1)
            //throw exception();
        }
        else
		    cout << process(c, n, m) << endl;
	}
}


#荣耀笔试##荣耀手机##笔经#
全部评论
2题,我用的py,输入输出搞不定,气死我了
1 回复 分享
发布于 2021-09-28 21:03
我的程序跑出来也是5.因为两个人过去的时候每个人打一把,手里在带一把,这样的话3把伞全过去了,然后一次性就可以带回来8个人,这样再来一次就可以了共5次
1 回复 分享
发布于 2021-09-28 20:45
荣耀笔试是不同岗题不一样嘛?还是随机抽取。
点赞 回复 分享
发布于 2021-09-30 11:52
好兄弟第三题思路是什么 我想了好久用hashmap结果没时间写了
点赞 回复 分享
发布于 2021-09-28 22:32
我的本来是5,结果一个都没过,就改了改,发现11 1 2的测试用例变成了7,无语了,希望有好心人帮我看看错在哪里。🙃
点赞 回复 分享
发布于 2021-09-28 21:18
我也是5.。。 int usen = 1; //用的小伞 int usem = 0;//用的大伞 int time1= 1;//时间 void func(int c, int n, int m) { if (c <= 0) return ; int backp = 2 * usen + 3 * usem; if (c - backp <= 0) return; if (m <= backp) {//大伞少于人数 usem = m; if (backp - m < n)  usen = backp - m;  else usen = n; } else {//大伞多于人数 usem = backp;  //伞数 = 人数 usen = 0; } time1+= 2; func(c - backp, n, m); } int main() { int n; cin >> n; vector<vector<int>> useVector; while (n--) { vector<int> tempVector; int c, n, m; cin >> c >> n >> m; tempVector.push_back(c); tempVector.push_back(n); tempVector.push_back(m); useVector.push_back(tempVector); } vector<int> result; for (int i = 0; i < useVector.size(); i++) { func(useVector[i][0], useVector[i][1] + 1, useVector[i][2]); result.push_back(time1); time1 = 1; } for (auto i : result) { cout << i << endl; } return 0; }
点赞 回复 分享
发布于 2021-09-28 21:07
答主能贴下第一题的代码或者思路吗?第一题“双回文串判断”我过了60%,不知道哪些边界条件没有过
点赞 回复 分享
发布于 2021-09-28 21:06
同结果5 一个点都没过去😭
点赞 回复 分享
发布于 2021-09-28 21:00
答案错了,答案不会没有考虑可以用小伞换大伞吧?
点赞 回复 分享
发布于 2021-09-28 20:57

相关推荐

老粉都知道小猪猪我很久没更新了,因为秋招非常非常不顺利,emo了三个月了,接下来说一下我的情况吧本人是双非本&nbsp;专业是完全不着计算机边的非科班,比较有优势的是有两段大厂实习,美团和字节。秋招面了50+场泡池子泡死的:滴滴&nbsp;快手&nbsp;去哪儿&nbsp;小鹏汽车&nbsp;不知名的一两个小厂其中字节13场&nbsp;两次3面挂&nbsp;两次2面挂&nbsp;一次一面挂其中有2场面试题没写出来,其他的都是全a,但该挂还是挂,第三次三面才面进去字节,秋招加暑期总共面了22次字节,在字节的面评可以出成书了快手面了8场,2次实习的,通过了但没去,一次2面挂&nbsp;最后一次到录用评估&nbsp;至今无消息滴滴三面完&nbsp;没几天挂了&nbsp;所有技术面找不出2个问题是我回答不上来的,三面还来说我去过字节,应该不会考虑滴滴吧,直接给我干傻了去哪儿一天速通&nbsp;至今无消息小鹏汽车hr&nbsp;至今无消息美团2面挂&nbsp;然后不捞我了,三个志愿全部结束,估计被卡学历了虾皮二面挂&nbsp;这个是我菜,面试官太牛逼了拼多多二面挂&nbsp;3道题也全写了&nbsp;也没问题是回答不出来的&nbsp;泡一周后挂腾讯面了5次&nbsp;一次2面挂&nbsp;三次一面挂,我宣布腾讯是世界上最难进的互联网公司然后还有一些零零散散的中小厂,但是数量比较少,约面大多数都是大厂。整体的战况非常惨烈,面试机会少,就算面过了也需要和各路神仙横向对比,很多次我都是那个被比下去的人,不过这也正常,毕竟谁会放着一个985的硕士不招,反而去招一个双非读化学的小子感觉现在互联网对学历的要求越来越高了,不仅仅要985还要硕士了,双非几乎没啥生存空间了,我感觉未来几年双非想要进大厂开发的难度应该直线上升了,唯一的打法还是从大二刷实习,然后苟个转正,不然要是去秋招大概率是炮灰。而且就我面字节这么多次,已经开始问很多ai的东西了,你一破本科生要是没实习没科研懂什么ai啊,纯纯白给了
不知名牛友_:爸爸
秋招你被哪家公司挂了?
点赞 评论 收藏
分享
哈哈哈,你是老六:倒挂很正常,我22年毕业,现在干了3年也就大厂白菜价呢,我比校招经验还强呢,我还能带校招的呢
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务