下面是我自己写的程序
有一个大数据是在是调不出来。。
#include<stdio.h>
#include<stdlib.h>
int d[500050],f[500050],k=1;
char s[500050];
int N,K;
void deal(int a,int b,int i)//当前需要删除i个数,要在区间[a,b]中选出一个最大的数字作为该位上的数字
{
int temp;
if(i==0)//删除完毕,退出
{
for(int x=a;x<=b;x++)
d[k++]=f[x];
return;
}
int n=b-a+1;//区间长度
int max=0;
for(int x=0;x<=i;x++)
if(f[a+x]>max)
{
max=f[a+x];
temp=a+x;//记录当前选取数的位置
}
d[k++]=max;
deal(temp+1,b,i-(temp-a));
}
void change()
{
for(int i=0;i<N;i++)
f[i+1]=s[i]-48;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d %d",&N,&K);
scanf("%s",s);
change();
deal(1,N,K);
for(int i=1;i<=N-K;i++)
printf("%d",d[i]);
return 0;
}
有一个大数据是在是调不出来。。
#include<stdio.h>
#include<stdlib.h>
int d[500050],f[500050],k=1;
char s[500050];
int N,K;
void deal(int a,int b,int i)//当前需要删除i个数,要在区间[a,b]中选出一个最大的数字作为该位上的数字
{
int temp;
if(i==0)//删除完毕,退出
{
for(int x=a;x<=b;x++)
d[k++]=f[x];
return;
}
int n=b-a+1;//区间长度
int max=0;
for(int x=0;x<=i;x++)
if(f[a+x]>max)
{
max=f[a+x];
temp=a+x;//记录当前选取数的位置
}
d[k++]=max;
deal(temp+1,b,i-(temp-a));
}
void change()
{
for(int i=0;i<N;i++)
f[i+1]=s[i]-48;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d %d",&N,&K);
scanf("%s",s);
change();
deal(1,N,K);
for(int i=1;i<=N-K;i++)
printf("%d",d[i]);
return 0;
}
200字以内,仅用于支线交流,主线讨论请采用回复功能。