尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

2025HAUE新生周赛六题解

2025HAUE新生周赛六题解 难度分布签到 D简单 A B F J中等 C E G I困难 HA⑨的冻青蛙思路博弈如果是3的倍数则后手胜利。如果先手拿1则后手拿2如果先手拿2则后手拿1后手一定可以取走最后的青蛙。如果不是3的倍数先手可以通过取一次青蛙把青蛙的数量变成3的倍数随后按照上面的思路把自己当作后手则先手一定取走最后的青蛙则先手必胜。代码#includebits/stdc.husingnamespacestd;#defineintlonglongsignedmain(){intn;cinn;if(n%30){cout(99)endl;}else{coutQAQendl;}return0;}B⑨的切磋思路显然不会出现输出あたいってば最強ね的情况当做题数相等时输出最强的我下意识地感到了危险,否则输出(99)。代码#includebits/stdc.husingnamespacestd;#defineintlonglongsignedmain(){intn;cinn;intres0;for(inti0;in;i){inta,b;charch;cinachb;if(ch){if(ab9)res;}else{if(a-b9)res;}}if(resn)cout最强的我下意识地感到了危险;elsecout(99);return0;}COSU思路按照题意遍历数组并记录上一个1的位置。代码#includebits/stdc.husingnamespacestd;voidsolve(){intn,k;cinnk;string s;cins;intans0;intlast-1e9;for(inti0;in;i){if(s[i]1i-lastk)ans;if(s[i]1)lasti;}coutans\n;}intmain(){ios::sync_with_stdio(false);cin.tie(0);intt;cint;while(t--)solve();}DCiallo(∠・ω )⌒☆思路签到题按照题目要求直接输出即可。代码#includebits/stdc.husingnamespacestd;#defineintlonglongsignedmain(){for(inti0;i721;i)coutCiallo(∠•ω )⌒☆endl;return0;}E喵喵的喵喵思路前缀和遍历数组查找最大值即可。代码#includebits/stdc.husingnamespacestd;#defineintlonglongsignedmain(){intn,k;cinnk;vectorinta(n1);for(inti1;in;i)cina[i];a[0]0;for(inti1;in;i)a[i]a[i-1];intl0,r0,mm0;for(intin;ik;i--){if(a[i]-a[i-k]mm){mma[i]-a[i-k];li-k1;ri;}}coutmmendll rendl;return0;}F喵喵的排名(esay)思路本题考察结构体排序用结构体数组把题目的数据储存起来因为数据量较小依据题意进行冒泡排序依照题意输出即可代码#includebits/stdc.husingnamespacestd;structplayer{string name;intkills;intdeaths;intassists;};intcmp(player A,player B){if(A.kills!B.kills)returnA.killsB.kills;elseif(A.deaths!B.deaths)returnA.deathsB.deaths;elsereturnA.assistsB.assists;}intmain(){intn;cinn;vectorplayerp;for(inti0;in;i){string n;inta,b,c;cinnabc;p.push_back({n,a,b,c});}// 冒泡排序for(inti0;in;i){for(intji1;jn;j){// 比较 killsif(p[i].killsp[j].kills){swap(p[i],p[j]);}elseif(p[i].killsp[j].kills){// 如果 kills 相同比较 deathsif(p[i].deathsp[j].deaths){swap(p[i],p[j]);}elseif(p[i].deathsp[j].deaths){// 如果 deaths 也相同比较 assistsif(p[i].assistsp[j].assists){swap(p[i],p[j]);}}}}}for(inti0;in;i){coutp[i].name p[i].kills p[i].deaths p[i].assistsendl;}}G喵喵的排名(hard)思路本题与F题的差别在于数据量变大了冒泡排序无法AC并新增一项字典序排序要求。同样用结构体数组储存题目数据。然后编写cmp函数借助STL库中的sort函数进行自定义排序最后依题意输出即可代码#includebits/stdc.husingnamespacestd;structplayer{string name;intkills;intdeaths;intassists;};intcmp(player A,player B){if(A.kills!B.kills)returnA.killsB.kills;elseif(A.deaths!B.deaths)returnA.deathsB.deaths;elseif(A.assists!B.assists)returnA.assistsB.assists;elsereturnA.nameB.name;}intmain(){intn;cinn;vectorplayerp;for(inti0;in;i){string n;inta,b,c;cinnabc;p.push_back({n,a,b,c});}sort(p.begin(),p.end(),cmp);for(inti0;in;i){coutp[i].name p[i].kills p[i].deaths p[i].assistsendl;}}H喵喵的网吧思路二分做法对于m块电池最少可以让电脑运行0分钟最多可以让电脑运行sum分钟(sum:所有电池可以让一台电脑运行的时间总和)则答案必定在这个区间内且满足单调性所以我们考虑用二分法来解决这道题目我们可以假设让n台电脑共同运行x分钟那么对于让一台电脑运行时间大于等于x的电池可以让它固定在一台电脑上持续供电这是对此类电池的最优方案对于剩余供电时长不满足x分钟的电池我们可以随意组合因为换电池不消耗时间所以只要剩余电池的供电总时长大于等于剩余电脑*x即可满足让n台电脑同时运行x分钟否则不能。因为可以让n台电脑同时运行x分钟则必然可以让n台电脑同时运行小于x的时长只需要向上二分更大的答案看是否成立即可否则向下二分更小的答案看否成立最终结果既为正确答案。代码#includebits/stdc.husingnamespacestd;usinglllonglong;boolcheck(vectorlla,ll mid,intn){ll sum0;for(inti0;ia.size();i){if(a[i]mid){n--;}else{suma[i];}}if(sumn*mid){returntrue;}returnfalse;}intmain(){intn,m;cinnm;vectorlla(m);ll sum0;for(inti0;im;i){cina[i];suma[i];}ll l0,rsum,ans0;while(lr){ll mid(lr)/2;if(check(a,mid,n)){ansmid;lmid1;}else{rmid-1;}}coutansendl;return0;}贪心做法受解法一的启发我们可以得出如下贪心策略记所有电池的电量总和为sum \text{sum}sum则理论上至多可以供电x ⌊ sum n ⌋ x \left\lfloor \frac{\text{sum}}{n} \right\rfloorx⌊nsum​⌋我们对电池电量从大到小排序然后从电量最大的电池开始遍历1.若该电池电量超过x xx则将其供给一台电脑问题缩减为n − 1 n-1n−1台电脑的子问题。2.若该电池电量不超过x xx则其余电池的电量均不超过x xx此时有n ⋅ x n ⋅ ⌊ sum n ⌋ ≤ sum n \cdot x n \cdot \left\lfloor \frac{\text{sum}}{n} \right\rfloor \leq \text{sum}n⋅xn⋅⌊nsum​⌋≤sum根据解法一的结论这些电池可以给n nn台电脑供电x xx分钟。由于随着问题规模减小x xx单调非增因此若遍历到一个电量不超过x xx的电池时可直接返回x xx作为答案。代码#includebits/stdc.husingnamespacestd;usinglllonglong;intmain(){ll n,m;cinnm;vectorlla(m);ll sum0;for(inti0;im;i){cina[i];suma[i];}sort(a.begin(),a.end(),greaterll());for(inti0;ia.size();i){if(a[i]sum/n){coutsum/n;return0;}n--;sum-a[i];}return0;}I喵喵方块思路按照题意模拟即可记录当前最高的位置。代码#includebits/stdc.h#defineintlonglongusingnamespacestd;signedmain(){intn,m;cinnm;inth0;vectorinthh(n1,0);for(inti1;im;i){intt,x;cintx;if(t1){if(hh[x]-2hh[x1]){hh[x];hh[x1]hh[x];}else{hh[x1]3;hh[x]hh[x1];}hmax(h,hh[x]);}elseif(t2){if(hh[x]1hh[x1]){hh[x]2;hh[x1]hh[x]1;}else{hh[x1]2;hh[x]hh[x1]-1;}hmax(h,hh[x1]);}elseif(t3){if(hh[x]-1hh[x1]hh[x]hh[x2]){hh[x];hh[x1]hh[x]1;hh[x2]hh[x];}elseif(hh[x1]1hh[x]hh[x1]1hh[x2]){hh[x1]3;hh[x]hh[x1]-1;hh[x2]hh[x1]-1;}elseif(hh[x2]-1hh[x1]hh[x2]hh[x]){hh[x2];hh[x]hh[x2];hh[x1]hh[x2]1;}hmax(h,hh[x1]);}elseif(t4){hh[x]4;hmax(h,hh[x]);}elseif(t5){if(hh[x]-1hh[x1]){hh[x];hh[x1]hh[x]1;}else{hh[x1]3;hh[x]hh[x1]-1;}hmax(h,hh[x1]);}elseif(t6){if(hh[x]hh[x1]){hh[x]2;hh[x1]hh[x];}else{hh[x1]2;hh[x]hh[x1];}hmax(h,hh[x]);}}couthendl;return0;}J喵喵喵思路遍历字符串如果遇到标点符号插入miao,注意不要在原字符串中暴力插入后再输出时间复杂度过高会导致程序时间超限。代码#includebits/stdc.husingnamespacestd;#defineintlonglongsignedmain(){string s;getline(cin,s);for(autoit:s){if(it,||it.||it?||it!)cout miao;coutit;}return0;}
返回列表