Codeforces Round #694 (Div. 2) A. Strange Partition
https://codeforces.com/contest/1471/problem/A
题意:花式求和,一种答案先除上取整再相加,另一种先相加再取整。先输出小的,再输出大的。
以下为两个解法
1.手动上取整
1 // 2 // Created by w on 2021/1/5. 3 // 4 5 #include <iostream> 6 #include <cstdio> 7 #include <cmath> 8 #include <algorithm> 9 10 typedef long long ll ; 11 const int maxx=1e6; 12 int arr[maxx]; 13 using namespace std; 14 int main() 15 { 16 int t; 17 cin>>t; 18 while (t--) 19 { 20 ll n,x; 21 cin>>n>>x; 22 ll sum1=0; 23 ll sum2=0; 24 int minn,maxx; 25 for(int i=0;i<n;i++) 26 { 27 cin>>arr[i]; 28 sum1+=arr[i]; 29 } 30 if(sum1%x==0) 31 sum1=sum1/x; 32 else 33 sum1=sum1/x+1; 34 for(int i=0;i<n;i++) 35 { 36 if(arr[i]%x==0) 37 sum2+=arr[i]/x;//整除的话就不取整了,直接除开就好,因为不会出现小数 38 else 39 sum2+=arr[i]/x+1;//+1是上取整,因为整形默认舍弃小数 40 41 } 42 cout<<min(sum1,sum2)<<" "; 43 cout<<max(sum2,sum2)<<endl; 44 } 45 return 0; 46 }
2.用ceil函数取整
1 // 2 // Created by w on 2021/1/6. 3 // 4 5 // 6 // Created by w on 2021/1/5. 7 // 8 9 #include <iostream> 10 #include <cstdio> 11 #include <cmath> 12 #include <algorithm> 13 14 typedef long long ll ; 15 //const int maxx=1e6; 16 //int arr[maxx]; 17 using namespace std; 18 int main() 19 { 20 int t; 21 cin>>t; 22 while (t--) 23 { 24 double n,x; 25 cin>>n>>x; 26 ll sum1=0.0; 27 ll sum2=0.0; 28 int minn=0x3f3f33f; 29 for(int i=0;i<n;i++) 30 { 31 double tmp; 32 cin>>tmp; 33 sum1+=tmp; 34 ll tmp2=ceil(tmp/x);//ceil上取整函数,注意传参传double类型,返回值也是double 35 // cout<<tmp2<<endl; 但是注意这个题要变成强行转换为整形,否则答案会出现小数会wa 36 sum2+=tmp2; 37 } 38 ll tmp3=ceil(sum1/x); 39 // cout<<tmp3<<endl; 40 // cout<<sum2<<endl; 41 cout<<min(tmp3,sum2)<<" "; 42 cout<<max(tmp3,sum2)<<endl; 43 } 44 return 0; 45 }

浙公网安备 33010602011771号