拼多多笔试真题-多多的Boss挑战(C++/Py/Java /Js/Go)

📅 2026/7/11 7:57:32
拼多多笔试真题-多多的Boss挑战(C++/Py/Java /Js/Go)
多多的Boss挑战拼多多技术岗 5月17号笔试 第一题题目内容多多鸡在挑战强大的B O S S BOSSBOSS他有n nn个技能每个技能具有伤害值释放一次造成的伤害冷却时间释放后必须等待的时间从释放开始计算注意一旦释放某个技能就必须周期性地持续释放它具体规则如下你可以在t tt秒内使用1 11次初始释放一个技能每次释放耗时1 11秒期间不能释放其他技能之后必须在t c , t 2 c , t 3 c , . . . t c, t 2c ,t3c, ...tc,t2c,t3c,...持续释放该技能只要不超时其中c cc为冷却时间。如果c cc小于1 s 1s1s因为有释放时间则两次释放之间仍然必须大于等于1 s 1s1s。不能中途切换技能也不能组合多个技能同一时间只能释放一个技能所以不同技能的时间方案互斥战斗从时刻0 00开始持续T TT秒你只能选择一个技能和一个起始时间起始时间为0 00到T TT之间的正整数进行周期性释放。目标选择一个技能和一个起始时间使得在[ 0 , T ) [0,T)[0,T)时间内造成的总伤害最大。输入描述第一行一个整数T TT表示总战斗时长1 ≤ T ≤ 1000 1 \le T \le 10001≤T≤1000第二行N NN个整数表示每个技能的伤害值d a m a g e [ i ] damage[i]damage[i]1 ≤ n ≤ 10 1 \le n \le 101≤n≤101 ≤ d a m a g e [ i ] ≤ 10 9 1 \le damage[i] \le 10^91≤damage[i]≤109第三行N NN个整数表示每个技能的冷却时间c o o l d o w n [ i ] cooldown[i]cooldown[i]1 ≤ n ≤ 10 1 \le n \le 101≤n≤100 ≤ c o o l d o w n [ i ] ≤ 1000 0 \le cooldown[i] \le 10000≤cooldown[i]≤1000其中第二第三行的数据个数一定是相等的。输出描述总伤害最大值。样例1输入10 50 3输出200说明技能只有1 11个伤害50 5050冷却时间3 33。起始时间t 0 t0t0可在0 , 3 , 6 , 9 0,3,6,90,3,6,9释放→ 4 → 4→4次总伤害 50 × 4 200 50 × 4 20050×4200其他起始时间不会更多输出200 200200样例2输入5 30 2输出90说明t 0 t0t00 , 2 , 4 → 3 次 → 3 × 30 90 0,2,4 → 3次 → 3×30 900,2,4→3次→3×3090t 1 t1t11 , 3 → 2 次 → 2 × 30 60 1,3 → 2次 → 2×30 601,3→2次→2×3060最大是90 9090题解和思路思路实现思路模拟每个技能要想获取总伤害最大肯定都是从0开始进行释放能最大程度获取最大释放次数。按照题意模拟计算每个技能能获取最大总伤害damage[i] * (1 (T - 1) / gap)记录求种最大值即可。额外注意cooldown[i] 1情况下需要强制将gap设置为1C#includebits/stdc.husingnamespacestd;// 通用 切割函数 函数 将字符串str根据delimiter进行切割vectorintsplit(conststringstr,conststringdelimiter){vectorintresult;size_t start0;size_t endstr.find(delimiter);while(end!string::npos){result.push_back(stoi(str.substr(start,end-start)));startenddelimiter.length();endstr.find(delimiter,start);}// 添加最后一个部分result.push_back(stoi(str.substr(start)));returnresult;}intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intT;cinT;// 忽略换行符cin.ignore();vectorintdamage,cooldown;string input1,input2;getline(cin,input1);getline(cin,input2);damagesplit(input1, );cooldownsplit(input2, );longmaxDamage-1;intndamage.size();for(inti0;in;i){intgapmax(1,cooldown[i]);longcurrentDamage(long)damage[i]*(1(T-1)/gap);maxDamagemax(maxDamage,currentDamage);}coutmaxDamage;return0;}Javaimportjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassMain{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderbrnewBufferedReader(newInputStreamReader(System.in));intTInteger.parseInt(br.readLine());Stringinput1br.readLine();Stringinput2br.readLine();String[]damageStrinput1.split( );String[]cooldownStrinput2.split( );longmaxDamage-1;intndamageStr.length;for(inti0;in;i){intdamageInteger.parseInt(damageStr[i]);intcooldownInteger.parseInt(cooldownStr[i]);intgapMath.max(1,cooldown);longcurrentDamage(long)damage*(1(T-1)/gap);maxDamageMath.max(maxDamage,currentDamage);}System.out.println(maxDamage);}}pythonTint(input())# 读取伤害数组damagelist(map(int,input().split()))# 读取冷却数组cooldownlist(map(int,input().split()))max_damage-1nlen(damage)foriinrange(n):gapmax(1,cooldown[i])current_damagedamage[i]*(1(T-1)//gap)max_damagemax(max_damage,current_damage)print(max_damage)Javascriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});constinput[];rl.on(line,line{input.push(line);});rl.on(close,(){constTparseInt(input[0]);// 读取伤害数组constdamageinput[1].split( ).map(Number);// 读取冷却数组constcooldowninput[2].split( ).map(Number);letmaxDamage-1;constndamage.length;for(leti0;in;i){constgapMath.max(1,cooldown[i]);constcurrentDamagedamage[i]*(1Math.floor((T-1)/gap));maxDamageMath.max(maxDamage,currentDamage);}console.log(maxDamage);});Gopackagemainimport(bufiofmtosstrconvstrings)funcmain(){in:bufio.NewReader(os.Stdin)varTintfmt.Fscan(in,T)// 忽略第一行后的换行符in.ReadByte()input1,_:in.ReadString(\n)input2,_:in.ReadString(\n)input1strings.TrimSpace(input1)input2strings.TrimSpace(input2)// 读取伤害数组damageStr:strings.Split(input1, )// 读取冷却数组cooldownStr:strings.Split(input2, )maxDamage:int64(-1)n:len(damageStr)fori:0;in;i{damage,_:strconv.Atoi(damageStr[i])cooldown,_:strconv.Atoi(cooldownStr[i])gap:cooldownifgap1{gap1}currentDamage:int64(damage)*int64(1(T-1)/gap)ifcurrentDamagemaxDamage{maxDamagecurrentDamage}}fmt.Println(maxDamage)}