第一题
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N];
int main(){
int n, k;
scanf("%d%d", &n, &k);
int cnt = 1, sum = 0;
while(n > 1 && k > 0){
if(k >= cnt)k -= cnt;
else break;
sum += 1;
n = (n + 1) / 2;
// printf("%d %d %d %d\n", n, k, sum, cnt);
cnt *= 2;
}
printf("%d\n", sum + n);
}
第三题
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N];
int main(){
int n, k;
scanf("%d%d", &n, &k);
for(int i = 0; i < n; i++){
scanf("%d", &a[i]);
}
sort(a, a + n);
int cnt = 0, sum = 0;
for(int i = 0; i < n; i++){
int x = a[i] - sum;
if(x == 0)continue;
if(cnt >= k)break;
printf("%d\n", x);
sum += x;
cnt += 1;
}
while(cnt < k){
printf("0\n");
cnt++;
}
}
第二题不是数组前缀和的绝对值么,为啥只过了70%?