打卡信奥刷题(3108)用C++实现信奥题 P7291 「EZEC-5」人赢 加强版

张开发
2026/4/15 6:45:46 15 分钟阅读

分享文章

打卡信奥刷题(3108)用C++实现信奥题 P7291 「EZEC-5」人赢 加强版
P7291 「EZEC-5」人赢 加强版题目背景“我们在 小 Z 面前秀个恩爱吧。”“好的。”小 Z 发现他身边都是人赢这使他非常自闭。小 Z 又看着身边的潇不禁陷入了沉思……题目描述潇有一个数组kkk下标为111到nnn。潇定义f(x,y){min⁡(kx,ky)×(xy)x≠ykx×xxyf(x,y)\begin{cases} \min(k_x,k_y) \times (x y) x \ne y \\ k_x\times xxy \end{cases}f(x,y){min(kx​,ky​)×(xy)kx​×x​xyxy​。潇想知道对于任意的1≤x,y≤n1 \le x,y \le n1≤x,y≤nf(x,y)f(x,y)f(x,y)的最大值是多少。但是她不会做于是就问了善良的 小 Z然而非常想在妹子面前表现的 小 Z 发现他也不会做就只能够求助善良的你了。输入格式第一行一个整数nnn。第二行nnn个整数kkk第iii个整数为kik_iki​。含义如上文。输出格式一行一个整数表示对于任意的1≤x,y≤n1 \le x,y \le n1≤x,y≤nf(x,y)f(x,y)f(x,y)的最大值。输入输出样例 #1输入 #13 3 2 1输出 #16输入输出样例 #2输入 #25 3 4 5 4 3输出 #228说明/提示数据范围本题采用捆绑测试。Subtask 110 points1≤n≤501 \le n \le 501≤n≤50。Subtask 220 points1≤n≤50001 \le n \le 50001≤n≤5000。Subtask 320 points1≤n≤1061 \le n \le 10^61≤n≤106。Subtask 410 points保证所有kik_{i}ki​都相等。Subtask 540 points无特殊限制。对于100%100\%100%的数据1≤n≤1071 \le n \le 10^71≤n≤1071≤ki≤1091 \le k_{i} \le 10^91≤ki​≤109。本题建议使用较快的读入方式。std 使用的快读#definegetchar()(p1p2(p2(p1buf)fread(buf,1,121,stdin),p1p2)?EOF:*p1)charbuf[121],*p1buf,*p2buf;inlineintread(){charcgetchar();intx0;boolf0;for(;!isdigit(c);cgetchar())f^!(c^45);for(;isdigit(c);cgetchar())x(x1)(x3)(c^48);if(f)x-x;returnx;}C实现#includebits/stdc.h#defineintunsignedlonglongusingnamespacestd;constintM1e710;intn,a[M],ans;#definegetchar()(p1p2(p2(p1buf)fread(buf,1,121,stdin),p1p2)?EOF:*p1)charbuf[121],*p1buf,*p2buf;inlineintread(){charcgetchar();intx0;boolf0;for(;!isdigit(c);cgetchar())f^!(c^45);for(;isdigit(c);cgetchar())x(x1)(x3)(c^48);if(f)x-x;returnx;}intf(intx,inty){return(xy)*min(a[x],a[y]);}signedmain(){nread();for(inti1;in;i)a[i]read(),ansmax(ans,a[i]*i);for(intin-1,ln;i1;i--){ansmax(ans,f(i,l));if(a[i]a[l])li;}coutans;return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容

更多文章