Codeforces Round #581 (Div. 2)
A.BowWow and the Timetable(思维)
•题意
在 Saint Petersburg 城市,每天有 T ($T \leq 2_100$)分钟;
这个城市有一个车站,该车站只在第 $4^0,4^1,4^2,\cdots$ 分钟有车经过;
问,如果在 S 分钟到达车站,会错过几辆车?
其中,S 是按照二进制的形式给出;
•题解一(BigInteger)
用 Java 中的大数处理这个题,就是先将 S 转化成十进制,在转化成 4 的幂的形式;
属于无脑操作,细节看代码;
•Code
•题解二(二进制转四进制)
$2^k=4^{\lfloor{\frac{k}{2}}\rfloor}$;
且有 $2^0+2^1+2^2+\cdots +2^k < 2^{k+1}$
假设输入的二进制数 S 存放在字符数组中,并且 |S| = k,即最高位为 $2_{k-1}$;
如果 k-1 为奇数,即 k 为偶数,那么 $4^{\lfloor{\frac{k-1}{2}}\rfloor} < S < 4^{\lfloor{\frac{k}{2}}\rfloor}$,易得共错过 $\frac{k}{2}$ 辆车;
如果 k-1 为偶数,那么,$S \ge 4^{\lfloor{\frac{k-1}{2}}\rfloor}$,此时需要判断 $S$ 是否等于 $4^{\lfloor{\frac{k-1}{2}}\rfloor}$:
如果 '>',那么答案为 $\frac{k-1}{2}+1$;
反之,答案为 $\frac{k-1}{2}$,即判断第 $4^{\lfloor{\frac{k-1}{2}}\rfloor}$ 分钟的车是否会错过;
•Code