题目链接:http://codeforces.com/contest/789/problem/A
题意:给你n种东西,每种东西有ai个。然后你有两个包,每个包的容量都是k。你每天可以收集这些东西,但是每天不同的东西不能放在同一个包,每天包的容量都是k,问你把这些东西装完最少需要多少天。
分析:由题意可知,你每天最多可以装2k个东西,如果一个东西有x个,那么你可以用x/2k天来装一部分,剩下的就是x%2k。如果余数大于k,那你就还需要1天。如果余数等于0,就不用再加了,其他都是再需要半天。最后半天数/2+半天数%2+每一个x/2k就是答案。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 long long a[100005]; 5 int main() { 6 ios_base::sync_with_stdio(0); 7 cin.tie(0); 8 int n; 9 long long k; 10 cin>>n>>k; 11 long long result=0; 12 long long number=0; 13 for(int i=1;i<=n;i++){ 14 cin>>a[i]; 15 result+=(a[i]/(k*2)); 16 a[i]=a[i]%(2*k); 17 if(a[i]>k){ 18 result++; 19 } 20 else { 21 number++; 22 } 23 } 24 cout<<result+number/2+number%2<<endl; 25 26 27 28 return 0; 29 }