尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

上海计算机学会|网络月赛|2025年11月月赛|丙组|T4幻影香水

上海计算机学会|网络月赛|2025年11月月赛|丙组|T4幻影香水 简单思考版题目链接更好的阅读体验首先创建结构体存两个值一个为数值一个为是否使用过。然后就是一大堆输入。接着找最大值。我的方法是创建一个变量但凡下一个变量比上一个大且没有被用过就存要不然就不存。代码中为maxx而这里的index为最大值的下标。index别忘了标记组别。接着把左边k个也给拉进组里从index-1开始拉如果没用过就拉同时要标记为用过拉够了就break接着是往右边拉跟左边差不多从index1开始往右组别我这里没有单独列一个变量记组别而是直接保存在了数值的那个变量为了不被误解第一组保存为-1第二组保存为-2最后输出的时候输出一下绝对值就好了绝对值需要用到math头文件另外别忘了在循环最后改变一下组别名称如果为-1那就编程-2如过-2就改成-1以上斜体处要加循环#includeiostream#includemath.husingnamespacestd;structmate{intvalue;// 数值boolused;// 是否使用};mate a[200010];intmain(){intk,n,q;intans0;cinnk;// k数量for(inti0;in;i){cina[i].value;a[i].used0;}intnum-1;while(ansn){intbiao;intmaxx,index;maxxa[0].value;index0;for(inti0;in;i){if(a[i].valuemaxxa[i].usedfalse){maxxa[i].value;indexi;}}intleft,right;leftindex-1;rightindex1;if(a[index].usedfalse){a[index].usedtrue;a[index].valuenum;ans;if(ansn){break;}}//cout找最大值已完成endl;intii0;// 记录次数while(left0){if(a[left].usedfalse){a[left].valuenum;a[left].usedtrue;ii;ans;if(ansn){break;}if(iik){break;}}left--;}if(ansn)break;//cout往左拉队伍已完成endl;// 向右3ii0;while(rightn-1){if(a[right].usedfalse){a[right].valuenum;a[right].usedtrue;ans;if(ansn)break;ii;if(iik)break;}right;}//cout往右拉队伍已完成endl;if(ansn)break;if(num-1){num-2;//cout换过endl;}else{num-1;}}for(inti0;in;i)//输出{q(a[i].value);coutabs(q) ;}return0;}
返回列表