首页 > 荣耀笔试的一道题究竟 是我错了还是答案错了?
头像
正品哇哈哈
发布于 2021-09-28 20:28
+ 关注

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

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


部门聚餐,下大雨,要将所有人从食堂运到办公室。
现在由大伞和小伞,小伞一次撑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;
	}
}


全部评论

(9) 回帖
加载中...
话题 回帖