打卡信奥刷题(3050)用C++实现信奥题 P6661 [POI 2019/2020 R1] Pomniejszenie / 削减

张开发
2026/6/12 1:24:10 15 分钟阅读
打卡信奥刷题(3050)用C++实现信奥题 P6661 [POI 2019/2020 R1] Pomniejszenie / 削减
P6661 [POI 2019/2020 R1] Pomniejszenie / 削减题目背景Bajtek 和 Bitek 是兄弟俩Bajtek 是哥哥他们要玩一个游戏。题目描述游戏规则为写下较大数的人获胜。假设 Bajtek 写的是A AABitek 写的是B BB。A AA和B BB的长度相等且可能有前导零。但是每次比赛都是 Bajtek 赢即总是A ≥ B A \ge BA≥B所以 Bajtek 想输一次。他现在可以修改A AA上的恰好k kk位使得A AA比B BB小。求A AA修改后比B BB小的最大值。如果无法使得A AA比B BB小输出-1。因为兄弟俩很喜欢玩这个游戏所以他们要玩t tt局即要进行t tt次修改与判断。输入格式第一行一个整数t tt代表局数。接下来t tt行每行三个整数A , B , k A,B,kA,B,k代表 Bajtek 写的数Bitek 写的数和允许的修改次数。输出格式t tt行每行一个整数代表A AA经过修改后比B BB小的最大值。如果A AA怎样修改都不能使得A AA比B BB小输出-1。输入输出样例 #1输入 #14 555 333 1 0555 0551 3 0555 0333 4 9 9 1输出 #1255 0499 -1 8说明/提示样例说明前两组附加样例分别对应附加文件中的 sample1/2.in 和 sample1/2.out。第三组附加样例为 sample3.zip。数据规模与约定本题采用捆绑测试。假设这里的n nn为A , B A,BA,B的长度Subtask 118 pts1 ≤ n ≤ 5 1 \le n \le 51≤n≤5。Subtask 220 pts1 ≤ n ≤ 5000 1 \le n \le 50001≤n≤5000。Subtask 320 pts1 ≤ n ≤ 10 5 1 \le n \le 10^51≤n≤105k 1 k1k1。Subtask 442 pts无特殊限制。对于100 % 100\%100%的数据1 ≤ t ≤ 100 1 \le t \le 1001≤t≤1001 ≤ k ≤ n ≤ 10 5 1 \le k \le n \le 10^51≤k≤n≤105A ≥ B A \ge BA≥B。说明翻译自 POI 2019 C Pomniejszenie。C实现#includebits/stdc.husingnamespacestd;constintN1e55;intn,k,p;chars[N],t[N];voidsolve(){scanf(%s %s %d,s1,t1,k),nstrlen(s1),p0;for(inti1,pr0;in;i){if(t[i]-0){if(s[i]t[i]prkn-ik-pr)pi;if((t[i]1||s[i]0)pr1kn-ik-pr-1)pi;}prs[i]!t[i];}if(!p)returnputs(-1),void();for(inti1,out;in;i){if(ip)outt[i];elseif(!k)outs[i];elseif(ip)outt[i]-1-(s[i]1t[i]n-i1k);elseout9-(n-i1ks[i]9);putchar(out),k-out!s[i];}coutendl;}intmain(){intT;cinT;while(T--)solve();return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容

更多文章