求...助...
查看原帖
求...助...
220706
hanyiyang楼主2020/8/9 19:06
//hanyiyang c++ code

#include <bits/stdc++.h>
#define MAXN 3000005
#define MAXNUM 100005

using namespace std;

int k,m;
int len;
queue<int>q;
char ch[MAXN];
bool visited[MAXNUM];
bool is_dele[MAXNUM];
priority_queue<int,vector<int>,greater<int> >min_q;

bool cmp(char x,char y)
{
	return x<y;
}

void init()
{
	int i=0,p;
	int num=1;
	scanf("%d %d",&k,&m);
	q.push(1);
	min_q.push(1);
	memset(visited,false,sizeof(visited));
	memset(is_dele,false,sizeof(is_dele));
	while(1)
	{
		p=q.front();
		if(!visited[2*p+1])
			q.push(2*p+1),min_q.push(2*p+1),visited[2*p+1]=true,++num /*,cout<<2*p+1<<" "*/;
		if(!visited[4*p+1])
			q.push(4*p+5),min_q.push(4*p+5),visited[4*p+5]=true,++num /*,cout<<4*p+5<<" "*/;
		if(num>=2*k)
			break;
		q.pop();
	}
}

void get_k()
{
	int num=0;
	stack<char>t;
	for(int i=1;i<=k;++i)
	{
		int p=min_q.top();
		while(!t.empty())
			t.pop();
		while(p)
		{
			t.push(p%10+'0');
			p=p/10;
		}
		while(!t.empty())
		{
			ch[++num]=t.top();
			t.pop();
		}
		min_q.pop();
	}
	len=num;
	for(int i=1;i<=num;++i)
		cout<<ch[i];
	printf("\n");
	return;
}

void del_out()
{
	int num;
	for(int i=1;i<=m;++i)
	{
		num=i;
		while(ch[num+1]<=ch[num]&&num<=len)
			++num;
		is_dele[num]=true;
	}
	for(int i=1;i<=len;++i)
		if(!is_dele[i])
			cout<<ch[i];
	return;
}

int main()
{
	init();
	get_k();
	del_out();
	
	return 0;
}

2020/8/9 19:06
加载中...