2026/1/24 18:09:17
网站建设
项目流程
网站版面,wordpress 文章优化,中铝国际山东建设有限公司网站,丹阳网站建设价位欢迎大家订阅我的专栏#xff1a;算法题解#xff1a;C与Python实现#xff01; 本专栏旨在帮助大家从基础到进阶 #xff0c;逐步提升编程能力#xff0c;助力信息学竞赛备战#xff01;
专栏特色 1.经典算法练习#xff1a;根据信息学竞赛大纲#xff0c;精心挑选…欢迎大家订阅我的专栏算法题解C与Python实现本专栏旨在帮助大家从基础到进阶 逐步提升编程能力助力信息学竞赛备战专栏特色1.经典算法练习根据信息学竞赛大纲精心挑选经典算法题目提供清晰的代码实现与详细指导帮助您夯实算法基础。2.系统化学习路径按照算法类别和难度分级从基础到进阶循序渐进帮助您全面提升编程能力与算法思维。适合人群准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生希望系统学习C/Python编程的初学者想要提升算法与编程能力的编程爱好者附上汇总贴USACO历年白银组真题解析 | 汇总-CSDN博客【题目来源】洛谷[P3083 USACO13OPEN] Luxury River Cruise S - 洛谷【题目描述】农民约翰正带着贝西和其他奶牛们进行一次巡航他们航行在一个有N NN个港口1 ≤ N ≤ 10 3 1 \le N\le10^31≤N≤103的河网中港口编号为1 , 2 , 3 … N 1,2,3\dots N1,2,3…N贝西从港口1 11出发。每个港口恰好有两条流出的河道直接通向其他港口并且这些河道只能单向航行。在每个港口导游会选择走左边的河道或右边的河道继续向下游航行但他们会一遍又一遍地重复相同的选择顺序。更具体地说导游事先选定了一个长度为M MM的方向序列1 ≤ M ≤ 500 1\le M\le5001≤M≤500每个方向要么是左要么是右然后将这个序列重复K KK次1 ≤ k ≤ 10 9 1\le k\le10^91≤k≤109请帮她计算出她最终会停在哪个港口。【输入】第1 11行三个用空格隔开的整数N , M , K N,M,KN,M,K。第2 22行到第N 1 N1N1行中第i 1 i1i1行包含两个用空格隔开的整数分别表示港口i ii的左边河道和右边河道通向的港口编号。第N 2 N2N2行M 个用空格隔开的字符每个字符是 L 或 R。L 表示选择左边的河道R 表示选择右边的河道。【输出】输出一个整数表示贝西的巡航最终停靠的港口编号。【输入样例】4 3 3 2 4 3 1 4 2 1 3 L L R【输出样例】4【算法标签】《洛谷 P3083 Luxury River Cruise》 #模拟# #倍增# #USACO# #2013#【代码详解】#includebits/stdc.husingnamespacestd;constintN1005;intn,m,k;// n: 位置数, m: 操作序列长度, k: 操作轮数inta[N][2];// a[i][0/1]表示在位置i选择左/右后到达的位置boolflag[N];// flag[i]表示第i个操作是L(0)还是R(1)intf[N][30];// f[i][j]表示从位置i开始执行2^j轮操作后到达的位置intmain(){// 输入cinnmk;// 读入位置转移表for(inti1;in;i)cina[i][0]a[i][1];// a[i][0]是左选择a[i][1]是右选择// 读入操作序列for(inti1;im;i){charopt;cinopt;if(optR)// 右操作flag[i]1;// 标记为1elseflag[i]0;// 标记为0左操作}// 预处理计算每个位置执行一轮(m个操作)后到达的位置for(inti1;in;i){intposi;// 从位置i开始for(intj1;jm;j)// 执行一轮m个操作{// 根据操作类型选择左或右posa[pos][flag[j]];}f[i][0]pos;// 记录执行一轮后的位置}// 倍增预处理计算执行2^j轮后的位置for(intj1;j30;j)// 2^30 1e9足够大{for(inti1;in;i){// 执行2^j轮 先执行2^(j-1)轮再执行2^(j-1)轮f[i][j]f[f[i][j-1]][j-1];}}// 模拟执行k轮操作intpos1;// 起始位置是1for(inti29;i0;i--)// 从高位到低位处理k的二进制{if(k(1i))// 如果k的第i位是1{// 从当前位置执行2^i轮posf[pos][i];}}coutposendl;// 输出最终位置return0;}【运行结果】4 3 3 2 4 3 1 4 2 1 3 L L R 4