General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
188224157 Practice:
DaiRuiChen007
1560F2 - 30 C++14 (GCC 6-32) Accepted 889 ms 64 KB 2023-01-06 17:20:56 2023-01-06 17:20:56
→ Source
// LUOGU_RID: 98870181
#include<bits/stdc++.h>
using namespace std;
const int MAXN=11,MAXS=1<<10;
const int b[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
inline int bit(int x) { return 1<<x; }
int n,k,dp[MAXN][MAXS],a[MAXN];
bool vis[MAXN][MAXS];
inline int dfs(int dig,int S,bool lim,bool qd) {
	if(dig<0) return __builtin_popcount(S)<=k?0:-1; 
	if(!lim&&vis[dig][S]) return dp[dig][S];
	int ret=-1;
	for(int i=(lim?a[dig]:0);i<10;++i) {
		int k=dfs(dig-1,(qd&&i==0)?0:S|bit(i),lim&&(i==a[dig]),qd&&(i==0));
		if(k!=-1) {
			ret=b[dig]*i+k;
			break;
		}
	}
	if(!lim) vis[dig][S]=true,dp[dig][S]=ret;
	return ret;
}
inline void solve() {
	memset(dp,-1,sizeof(dp));
	memset(vis,false,sizeof(vis));
	scanf("%d%d",&n,&k);
	int len=0;
	while(n) {
		a[len]=n%10;
		n/=10,++len;
	}
	for(int i=len;i<=9;++i) a[i]=0;
	printf("%d\n",dfs(9,0,true,true));
}
signed main() {
	int T;
	scanf("%d",&T);
	while(T--) solve();
	return 0;
} 
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details