Codeforces Round #310 (Div. 2)

本文解析了三个算法挑战题目,包括二进制字符串简化、齿轮排序问题及娃娃套叠问题,提供了解决方案并分析了核心算法思想。

A. Case of the Zeros and Ones

Andrewid 允许同时删除一个仅由'0','1'组成的字符串中的'0','1',问你Andrewid 最终能得到一个最短的字符串的长度是多少。

ans = min(cnt('0'), cnt('1'));

 

B. Case of Fake Numbers

Andrewid有一排齿轮,相邻的齿轮靠在一起,其旋转方向相反。每次Andrewid能拨动齿轮转动一次,齿轮上有0~n-1的值,其中有个 active的值表示当前齿轮的值a[i],现在给出一排n个齿轮的当前值,问你是否能够转到n个齿轮按顺序排成(0, 1, 2, ...., n-1);

k = n-a[i] 得出总共要转多少下,(n + a[i] + flag * k) % n == i 判断每个位置是否转到真确位置。

flag表示当前转的方向顺时针为1,逆时针为-1。

 

C. Case of Matryoshkas

Andrewid 有n个娃娃,标号为1~n,小的标号的娃娃可以套在大的里面,每一秒可以把一个娃娃套在另一个娃娃上,也可以把一个娃娃拿出来,现在套好了k堆,要你用最小的时间吧这n个娃娃套在一起。

从1开始连续地数直到s后不连续了, 计算公式 (n-s) * 2 - (k-1) ,也就是说剩下的(n-s)个娃娃都要从原来的套好的堆中拆下来,并套回以1为开始的堆中。这样有两步操作,但是每堆中m个娃娃,拆完m-1个后剩下的那个便不用再拆一次了,于是减去(k-1).

转载于:https://www.cnblogs.com/xuelanghu/p/4608261.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值