2 条题解
-
1
问题本质:每次选最大的
x个非零元素各减 1,直到所有元素为 0,求最少操作次数。#include <stdio.h> typedef long long ll; int main() { int t; scanf("%d",&t); while (t--){ int n,x; scanf("%d%d",&n,&x); ll sum=0,max_a=0; for (int i=0;i<n;++i) { ll num; scanf("%lld",&num); sum+=num; if (num>max_a) { max_a=num; } } ll cnt_sum=(sum+x-1)/x; ll ans=(cnt_sum>max_a)?cnt_sum:max_a; printf("%lld\n",ans); } return 0; } -
0
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e6+5; const ll inf=1e18; ll t,n,x; ll a[N]; int main(){ ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>t; while(t--){ ll mx=0,sum=0; cin>>n>>x; for(int i=1;i<=n;i++){ cin>>a[i]; sum+=a[i]; mx=max(mx,a[i]); } cout<<max(mx,(sum+x-1)/x)<<'\n'; //(sum+x-1)/x的操作类似于向上取整,跟ceil函数作用一样 } return 0; }
- 1
信息
- ID
- 1196
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 50
- 已通过
- 23
- 上传者