机器猫喜欢打游戏。某游戏中有一个叫做「维和轰炸机」的单位,在一轮轰炸中拥有 3 颗弹药。
敌方拥有 n 个单位,每个单位有对应的血量。维和轰炸机的每颗弹药可以对一个敌方单位造成 100 伤害,3 颗弹药可以丢给不同的敌方单位。
敌方单位在血量小于等于 0 时,视为被摧毁。例如,某敌方单位血量为 260,则投 2 颗弹药之后其血量为 60,再投一颗弹药可以将其摧毁。
给定各个敌方单位的血量,问一轮空袭至少需要出动多少架维和轰炸机,才能摧毁全部敌方单位。
第一行,一个正整数 n,表示敌方单位数量。
接下来一行,n 个正整数,表示敌方各个单位的血量。
仅一行,一个正整数,表示需要出动的维和轰炸机数量。
1
260
1
2
200 400
2
2
199 401
3
第一个样例,只需要一架飞机空投全部弹药。
第二个样例,第一架飞机向敌方单位 1 丢两颗弹药,向敌方单位 2 丢一颗弹药;第二架飞机向敌方单位 2 丢三颗弹药。
第三个样例,第一架飞机向敌方单位 1 丢两颗弹药,向敌方单位 2 丢一颗弹药;第二架飞机向敌方单位 2 丢三颗弹药;此时敌方单位 2 还剩 1 的血量,需要第三架飞机向敌方单位 2 丢一颗弹药。
对于前 30% 的数据,保证敌方有且仅有一个单位,且该单位的血量是 300 的倍数。
对于前 60% 的数据,保证敌方单位不超过 10 个,敌方单位血量均为 100 的倍数。
对于 100% 的数据,保证敌方单位不超过 100000 个,每个敌方单位的血量不超过 108。
my code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a[100001],s;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
s+=ceil(a[i]*1.0/100);
}
cout<<ceil(s*1.0/3);
return 0;
}
我的问题:为什么把cout<<ceil(s*1.0/3)换成cout<<(s+3-1)/3就可以AC了?这两个不是都表示向上取整吗?