1.
能拆分(k>0)就把n二等分,不能拆分就返回n,递归就行了
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
int chai(int n,int k){
if(n==1)
return 1;
if(k==0)
return n;
if(n%2==1)
return chai(n/2+1,k-1)+1;
else
return chai(n/2,k-1)+1;
}
int main(){
int n,k;
scanf("%d %d",&n,&k);
int res=chai(n,k);
printf("%d\n",res);
return 0;
}
2.
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
int f[300005];
int main(){
int n;
long long cost=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>f[i];
}
for(int i=0;i<n-1;i++)
f[i+1]+=f[i];
for(int i=0;i<n;i++)
cost+=abs(f[i]);
cout<<cost<<endl;
return 0;
}
3.
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
int arr[100005];
int main(){
int n, k;
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>arr[i];
sort(arr, arr+n);
int cnt = 1;
cout<<arr[0]<<endl;
for(int i=1;i<n;i++){
if(cnt==k){
break;
}
if(arr[i]!=arr[i-1]){
cout<<arr[i]-arr[i-1]<<endl;
cnt++;
}
}
while(cnt++<k)
cout<<0<<endl;
return 0;
}