CF1555A PizzaForces

发布时间 2023-08-14 16:06:55作者: yxu0528

一道值得思考的数学题。

计算可知,做一块披萨的时间是 2.5 分钟,这在 3 个购买方案中一致。故此只需考虑怎样用 6,8,10 这 3 个数字**组合出大于等于 $n$ 且最小的数**。

可以证明,**这 3 个数可以组合成不小于 6 的所有偶数**。证明如下:

- 对于不小于 6 的任意偶数 $n$,它都可以被表示为 $6 \times a + b$ 的形式,其中 $a \in \mathbb{N}$ 且 $b \in \{0,2,4\}$。

- 当 $b=0$ 时,$n$ 能被 6 整除;当 $b=2$ 时,$n$ 能被 8 整除;而当 $b=4$ 时,$n$ 能被 10 整除。证毕。

得到该性质(或许是直接猜到)后,进行分类讨论:

1. 若 $n<6$,直接输出 15;
2. 若 $n \ge 6$ 且 $n$ 为奇数,$n \gets n+1$,转到情况 3。
3. 若 $n \ge 6$ 且 $n$ 为偶数,在 6 块的基础上,**每多 2 块就要加 5 分钟**,即 $(n-6) \times \dfrac{5}{2} + 15$。

按上式计算即可。

值得注意的是,如果在代码中混用 `puts()` 和取消同步流的 `cout` 进行输出,可能会出现输出顺序错误。

如果在代码中直接 `cout<<15+(n-6)*2.5<<endl;` ,结果将表示为科学计数法形式。

$n$ 显然应当使用 `long long` 类型。而在 CF 中,如果用 `printf()` 输出,标识符应当为 `"%I64d"`。

下面是 AC 代码:

```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int T;cin>>T;
while(T--){
long long n;cin>>n;
if(n<6) cout<<15<<endl;
else{
if(n&1) ++n;
cout<<15+(n-6)*5/2<<endl;
}
}
return 0;
}
```

### THE END