Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
188224157 Дорешивание:
DaiRuiChen007
1560F2 - 30 C++14 (GCC 6-32) Полное решение 889 мс 64 КБ 2023-01-06 17:20:56 2023-01-06 17:20:56
→ Исходный код
// 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;
} 
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования