P9667 [ICPC 2022 Jinan R] Tower题目描述庞教授搭了nnn座不同高度的塔。第iii座塔的高度是aia _ {i}ai​。寿教授不喜欢这些参差不齐的塔。他决定先去掉它们中的mmm座然后执行以下操作中的一些或不执行选择一座塔并增加它111个单位高度。选择一座塔并减少它111个单位高度。选择一座塔并把它的高度aia _ {i}ai​除以222如果它不是整数的话向下取整。寿教授永远不会选择被拆除的塔。如果操作后塔的高度变为000则不允许操作。在这些约束条件下寿教授可以按任意顺序执行任意数量的运算。寿教授希望所有没有被拆除的塔都有相同的高度aia _ {i}ai​。请计算实现此目标的最小操作次数。输入格式第一行是一个整数T(1⩽T(1\leqslantT(1⩽TTT⩽\leqslant⩽10)10)10),表示有TTT组数据。对于每组测试数据第一行包括两个整数n,m(1⩽n,m (1\leqslantn,m(1⩽nnn⩽\leqslant⩽500500500,000⩽\leqslant⩽mmm⩽n\leqslant n⩽n)表示塔的数量以及寿教授在执行操作之前应该删除的塔的数量。下一行包括nnn个整数a1,…,an(1⩽a _ {1},\dots,a _ {n} (1\leqslanta1​,…,an​(1⩽aia _ {i}ai​⩽\leqslant⩽109)10^9)109)表示塔的最初高度。输出格式对于每组测试数据在一行中输出最小操作数。输入输出样例 #1输入 #13 2 0 2 6 5 0 1 2 3 4 5 5 3 1 2 3 4 5输出 #12 4 1C实现#includebits/stdc.husingnamespacestd;#defineN505#defineintlonglongintn,m,i,j,ans,a[N],t,s[N];vectorintG;signedmain(){scanf(%lld,t);while(t--){G.clear();scanf(%lld%lld,n,m),ans1e9;for(i1;in;i)scanf(%lld,a[i]);for(i1;in;i){intka[i];while(k){G.push_back(k);k1;}}for(inty:G){for(i1;in;i)s[i]1e9;for(i1;in;i){intka[i],cnt0;while(k1){s[i]min(s[i],cntabs(k-y));k1,cnt;}}sort(s1,s1n);intsum0;for(i1;in-m;i)sums[i];ansmin(ans,sum);}printf(%lld\n,ans);}return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容