站外水题求调
  • 板块学术版
  • 楼主Zzzcr
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/27 15:48
  • 上次更新2024/4/27 18:02:16
查看原帖
站外水题求调
761491
Zzzcr楼主2024/4/27 15:48
#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt")

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

#define _f(i, a, b) for (int i = a; i <= b; ++i)
#define _d(i, a, b) for (int i = a; i >= b; --i)
using pii = pair<int, int>;
using ll = long long;
#define fi first
#define se second

static constexpr int N = 2e5 + 5;

long long a, b, c;
int h[20];
int cnt[15], l1, l2;

void solve() {
	cin >> a >> b, c = b;
	while(a) cnt[a % 10ll]++, a /= 10ll, l1++;
	while(c) c /= 10ll, l2++;
	c = b;
	_f(i, 1, l2) h[l2 - i + 1ll] = c % 10ll, c /= 10ll;
	if(l1 < l2) {
		_d(i, 9, 0) _f(j, 1, cnt[i]) cout << i;
		return ;
	}

	
	else {
		bool flg = 1;
		_f(i, 1, l1) {
			if(flg) {
				_d(j, 9, 0) {
					if(j > h[i] || !cnt[j]) continue;
					if(j == h[i]) {
						
						int is_smaller = -1;
						cnt[j]--;
						int pos = i + 1;
						_f(t, 0, 9) {
							_f(k, 1, cnt[t]) {
								if(t < h[pos]) {
								 is_smaller = 1;
									break;
								}
								if(t > h[pos]) {
									is_smaller = 0;
									break;
								}
								++pos;
							}
							if(is_smaller != -1) break;
						}
						cnt[j]++;
						
						
						if(is_smaller != 0) {
							cout << j, cnt[j]--;
							break;
						}
						else continue;
					}
					if(j < h[i]) {
						flg = 0;
						cout << j, cnt[j]--;
						break;
					}
				}
			}
			if(!flg) break;
		}
		_d(i, 9, 0) _f(j, 1, cnt[i]) cout << i;
	}
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	solve();
	return 0;
}

// by zzzcr.

1

2024/4/27 15:48
加载中...