2026/2/19 10:32:41
网站建设
项目流程
易营宝自助建站系统,项目管理过程五个阶段,广州番禺区严格控制人员流动,市场调研方案欢迎大家订阅我的专栏#xff1a;算法题解#xff1a;C与Python实现#xff01; 本专栏旨在帮助大家从基础到进阶 #xff0c;逐步提升编程能力#xff0c;助力信息学竞赛备战#xff01;
专栏特色 1.经典算法练习#xff1a;根据信息学竞赛大纲#xff0c;精心挑选…欢迎大家订阅我的专栏算法题解C与Python实现本专栏旨在帮助大家从基础到进阶 逐步提升编程能力助力信息学竞赛备战专栏特色1.经典算法练习根据信息学竞赛大纲精心挑选经典算法题目提供清晰的代码实现与详细指导帮助您夯实算法基础。2.系统化学习路径按照算法类别和难度分级从基础到进阶循序渐进帮助您全面提升编程能力与算法思维。适合人群准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生希望系统学习C/Python编程的初学者想要提升算法与编程能力的编程爱好者附上汇总帖AtCoder Beginner Contest竞赛题解 | 汇总【题目来源】洛谷[AT_abc438_e ABC438E] Heavy Buckets - 洛谷【题目描述】有N NN人和N NN桶。人和水桶的编号都是1 , 2 , … , N 1, 2, \ldots, N1,2,…,N。最初人i ii只持有水桶i ii而水桶i ii是空的。从现在起将执行以下操作10 9 10^9109次同时在i 1 , 2 , … , N i 1, 2, \ldots, Ni1,2,…,N中i ii将i ii个单位的水添加到自己手中的每个水桶中并将这些水桶递给A i A_iAi。在这里水桶中的水量没有限制。对于i 1 , 2 , … , Q i 1, 2, \ldots, Qi1,2,…,Q请回答下列问题求第T i T_iTi次操作后水桶B i B_iBi中的水量。【输入】输入内容由标准输入法提供格式如下N NNQ QQA 1 A_1A1A 2 A_2A2… \ldots…A N A_NANT 1 T_1T1B 1 B_1B1T 2 T_2T2B 2 B_2B2⋮ \vdots⋮T Q T_QTQB Q B_QBQ【输出】输出Q QQ行。第i ii行应包含第i ii次查询的答案。【输入样例】5 6 3 4 2 2 5 4 3 6 5 1 4 10 1 10 2 1000000000 1【输出样例】11 30 4 28 30 2999999998【算法标签】《洛谷 AT_abc438_e Heavy Buckets》【代码详解】#includebits/stdc.husingnamespacestd;#defineintlonglong// 将int定义为long long处理大数constintN200005;intn,Q;// n: 数组长度Q: 查询次数inta[N];// 原始数组// f[j][i]: 从位置i开始走2^j步到达的位置// v[j][i]: 从位置i开始走2^j步经过的值的和intf[30][N],v[30][N];signedmain()// 因为#define int long long所以用signed main{// 输入数据cinnQ;for(inti1;in;i){cina[i];// 初始化走2^01步f[0][i]a[i];// 从i走1步到a[i]v[0][i]i;// 经过的值是起始位置i}// 预处理倍增表for(intj1;j30;j)// 2^30 1e9足够大{for(inti1;in;i){// 从i走2^j步 从i走2^(j-1)步再走2^(j-1)步f[j][i]f[j-1][f[j-1][i]];// 经过的值的和 前半段的和 后半段的和v[j][i]v[j-1][i]v[j-1][f[j-1][i]];}}// 处理查询while(Q--){intt,b;// t: 走的步数b: 起始位置cintb;intans0;// 存储经过值的和// 从高位到低位处理t的二进制表示for(inti29;i0;i--){// 如果t的第i位是1if(t(1i)){// 累加从b开始走2^i步经过的值的和ansv[i][b];// 更新当前位置bf[i][b];}}coutansendl;}return0;}【运行结果】5 6 3 4 2 2 5 4 3 11 6 5 30 1 4 4 10 1 28 10 2 30 1000000000 1 2999999998