QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#288981#7940. Impossible NumbersPhantomThresholdWA 2ms8380kbC++202.4kb2023-12-23 14:36:172023-12-23 14:36:18

Judging History

你现在查看的是最新测评结果

  • [2023-12-23 14:36:18]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:8380kb
  • [2023-12-23 14:36:17]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int maxn = 210000;

int n,K;
int a[maxn];

int upper[1<<10],bound[1<<10],hn[1<<10];
int nex[1<<10][10];
int ai[1<<10][1100];
string num[1<<10];

void findfir(const int S)
{
	num[S].clear();
	int &left=hn[S];
	left=0;
	for(int i=1;i<=upper[S];i++) 
	{
		int temp= left+upper[S]-i;
		int &c=ai[S][i];
		
		if(temp>=bound[S]) c=(i==1?1:0);
		else c= nex[S][i==1?1:0];
		//ai[S][i]=c;
		left+= (S>>c&1);
		num[S].push_back('0'+c);
	}
	return ;
}
void findnex(const int S)
{
	int i=upper[S];
	int &left=hn[S];
	
	while(i>=1)
	{
		int &c=ai[S][i];
		left-= (S>>c)&1;
		
		int temp= left+upper[S]-i;
		if(temp>=bound[S])
		{
			if(c<9) break;
		}
		else
		{
			if(c<9 && nex[S][c+1]!=10) break;
		}
		i--;
		num[S].pop_back();
	}
	if(i>=1)
	{
		num[S].pop_back();
		
		int fi=0;
		for(;i<=upper[S];i++)
		{
			int temp= left+upper[S]-i;
			int &c=ai[S][i];
			
			if(temp>=bound[S]) 
			{
				if(!fi) c++;
				else c=0;
			}
			else
			{
				if(!fi) c=nex[S][c+1];
				else c=nex[S][0];
			}
			fi=1;
			
			left+= (S>>c&1);
			num[S].push_back('0'+c);
		}
		return;
	}
	else
	{
		upper[S]++;
		findfir(S);
		return;
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	
	cin>>n>>K;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<6;j++)
		{
			int x; cin>>x;
			a[i]|=1<<x;
		}
	}
	
	for(int s=0;s<(1<<10);s++)
	{
		for(int i=1;i<=n;i++) if(s&a[i])
			upper[s]++;
		upper[s]++;
		
		bound[s]=upper[s];
	/*	for(int j=0,ji=0;j<=9;j++) if(s>>j&1)
		{
			ac[s][ji++]=j;
		}*/
		for(int j=9,las=10;j>=0;j--)
		{
			if(s>>j&1) las=j;
			nex[s][j]=las;
		}
	}
	upper[1]++;
	
	struct cmp
	{
		bool operator()(const pair<string,int> &p1,const pair<string,int> &p2)const
		{
			if(p1.first.length() != p2.first.length())
				return p1.first.length() > p2.first.length();
			return p1>p2;
		}
	};
	priority_queue< pair<string,int>, vector<pair<string,int>>, cmp >Q;
	for(int s=1;s<(1<<10);s++)
	{
		findfir(s);
		Q.emplace( num[s],s );
	}
	while(K--)
	{
		string ans;
		auto [SS,si]=Q.top();
		ans=SS;
		vector<int>temps;
		while(Q.top().first==SS)
		{
			temps.push_back(Q.top().second);
			Q.pop();
		}
		for(auto s:temps)
		{
			findnex(s);
			Q.emplace( num[s],s );
		}
		cout<<ans<<"\n\n"[K==0];
	}
	
	return 0;
}

详细

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 8380kb

input:

2 3
1 8 7 0 6 2
1 2 5 4 9 3

output:

33
34
35

result:

wrong answer 1st lines differ - expected: '33 34 35', found: '33'