首页 > 其他 > 详细

CF915C Permute Digits

时间:2018-01-30 11:04:30      阅读:270      评论:0      收藏:0      [点我收藏+]

思路:

从左到右贪心放置数字,要注意判断这个数字能否放置在当前位。

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int cnt[11], buf[11];
 5 
 6 bool check(ll t, ll b)
 7 {
 8     memcpy(buf, cnt, sizeof(int) * 11);
 9     for (int i = 0; i <= 9; i++)
10     {
11         while (buf[i]) { t *= 10; t += i; buf[i]--; }
12     }
13     return t <= b;
14 }
15 
16 int main()
17 {
18     string a, b;
19     while (cin >> a >> b)
20     {
21         int x = a.length(), y = b.length();
22         for (int i = 0; i < 11; i++) cnt[i] = 0;
23         for (int i = 0; i < x; i++) cnt[a[i] - 0]++;
24         ll ans = 0;
25         bool flg = x < y ? true : false;
26         for (int j = y - 1; j > y - x - 1; j--)
27         {
28             int k = flg ? 9 : b[y - 1 - j] - 0;
29             for (; k >= 0; k--)
30             {
31                 if (!cnt[k]) continue;
32                 cnt[k]--;
33                 if (check(ans + k, stoll(b)))
34                 {
35                     ans += k;
36                     if (k < b[y - 1 - j] - 0) flg = true; 
37                     if (j != y - x) ans *= 10; 
38                     break;
39                 }
40                 cnt[k]++;
41             }    
42         }
43         cout << ans << endl;
44     }
45     return 0;
46 }

 

CF915C Permute Digits

原文:https://www.cnblogs.com/wangyiming/p/8379981.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!