div2 1098

📅 2026/7/3 10:47:47 👁️ 阅读次数 📝 编程学习
div2 1098

A题
由0,1,2构成字符串,每一次操作选子序列,要求子序列和为3的倍数
一个单独的0,一个1和一个2,三个1或者三个2(没考虑到)
用0个数加上,1个数和2个数最小值,再看剩余的1或者2,能分出几个个数为3的
int ans=max(cnt1,cnt2)-min(cnt1,cnt2);
cout << cnt+min(cnt1,cnt2)+ans/3 <<endl;

B题
在一个环上,一个位于下,一个位于y,下,最多能走k步,y要追上x的最小时间
如果x不动,y追上x应是两条路径中最小值,一条是abs(x-y),另一条是n-abs(x-y)
取这两个最小值加上k就是答案,但是当n<=3时你会发现,答案永远是1
if(n<=3)
{
cout << 1 <<endl;
return ;
}
int ans=n-abs(x1-x2);
cout << k+min(ans,abs(x1-x2)) <<endl;

C题