题比较简单,注意一下111222333444这种情况,就是说要考虑到选取的几位也相同的情况。
#include<iostream>
#include<math.h>
#include<iomanip>
#include <string>
#include <cstdio>
#include<stdio.h>
#include <cstring>
#include <algorithm>
#include <queue>
#define ll long long
#define N 100010
using namespace std;int stop;
int n,k;
int arr[N];
int main(){
int i,j,k;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++){
scanf("%1d",&arr[i]);
}
sort(arr+1,arr+1+n);
int len,dig = n/k,cnt = 1;
if(n%k == 0){
len = k;
}else{
len = n%k;
dig++;
}
i = 0;
while (dig > 0)
{
bool flag = 0;
dig--;
cnt = i;//这里用cnt代表上一轮末位
for(i = cnt + len-1;i > cnt;i--){
if(arr[i] != arr[i+1]){
int temp = len;
len = cnt + len - i;
i = cnt + temp;
printf("%d",arr[i]);
flag = 1;
break;
}
}
if(!flag){
i += len;
printf("%d",arr[i]);
}
}
printf("\n");
return 0;
}
实现有点丑,请见谅。