Content
小 S 想把一块披萨切成大小、形状都相同的 \((n+1)\) 块(\(n\) 块分给 TA 的 \(n\) 个朋友,还有一块留给自己),试问最小需要切多少块。
数据范围:\(0\leqslant n\leqslant 10^{18}\)。
Solution
首先这道题目坑的一点就是 \(n\) 可能等于 \(0\),这时候不需要再切了,答案是 \(0\)。
然后看 \(n\neq 0\) 的情况。
首先是 \(2\mid (n+1)\) 的情况,那么我们可以发现有两次可以当一次切,可以求得需要切的次数为 \(\dfrac{n+1}{2}\)。然后是 \(2\nmid (n+1)\),那么没法再将多次当一次切了,那么需要且的次数就是 \((n+1)\)。
Code
ll n, ans;
int main() {
getll(n);
writell(ans = (!n ? 0 : (((n + 1) % 2) ? n + 1 : (n + 1) / 2)));
return 0;
}