题意:给定一个长度为偶数的数,输出小于它的最大的美丽数。如果一个数长度为偶数,且没有前导零,并存在一种排列是回文数的数为美丽数。给定的t个数长度总和不超过200000.

分析:

1、存在一种排列为回文数,即这个数包含的数字都是偶数个。

2、预处理出每个数字的个数。

3、从最右边一位依次往左枚举,当逐渐减小第i位时,统计目前的数中,第i位之前有多少个数字是奇数个,记为cnt。

4、因为第i位之后的数字可以随便填,所以如果第i位之后数字的个数大于等于cnt,那么则可以得出答案,大于的部分先用9填充,再从大到小依次用奇数个的数字填充即可。

5、如果枚举到最左边也没有答案,则直接输出数字长度-2个9即可。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = 200000 + 10;
  4. char s[MAXN];
  5. map<int, int> mp;
  6. int len;
  7. vector<int> v;
  8. bool judge(){
  9. for(int i = len - 1; i >= 0; --i){
  10. int t;
  11. if(i == 0) t = 1;
  12. else t = 0;
  13. --mp[s[i] - '0'];
  14. for(int j = s[i] - '0' - 1; j >= t; --j){
  15. ++mp[j];
  16. v.clear();
  17. for(int k = 0; k < 10; ++k){
  18. if(mp[k] & 1){
  19. v.push_back(k);
  20. }
  21. }
  22. int l = v.size();
  23. if(l <= len - i - 1){
  24. for(int k = 0; k < i; ++k){
  25. printf("%c", s[k]);
  26. }
  27. printf("%d", j);
  28. for(int k = 0; k < len - i - 1 - l; ++k){
  29. printf("9");
  30. }
  31. sort(v.begin(), v.end());
  32. for(int k = l - 1; k >= 0; --k){
  33. printf("%d", v[k]);
  34. }
  35. printf("\n");
  36. return true;
  37. }
  38. --mp[j];
  39. }
  40. }
  41. return false;
  42. }
  43. int main(){
  44. int t;
  45. scanf("%d", &t);
  46. while(t--){
  47. mp.clear();
  48. scanf("%s", s);
  49. len = strlen(s);
  50. for(int i = 0; i < len; ++i){
  51. ++mp[s[i] - '0'];
  52. }
  53. if(!judge()){
  54. for(int i = 0; i < len - 2; ++i){
  55. printf("9");
  56. }
  57. printf("\n");
  58. }
  59. }
  60. return 0;
  61. }

  

Largest Beautiful Number CodeForces - 946E (贪心)的更多相关文章

  1. Largest Beautiful Number CodeForces - 946E (贪心)

    大意: 定义一个好数为位数为偶数, 且各位数字重排后可以为回文, 对于每个询问, 求小于$x$的最大好数. 假设$x$有$n$位, 若$n$为奇数, 答案显然为$n-1$个9. 若为偶数, 我们想让答 ...

  2. Educational Codeforces Round 39 (Rated for Div. 2) 946E E. Largest Beautiful Number

    题: OvO http://codeforces.com/contest/946/problem/E CF 946E 解: 记读入串为 s ,答案串为 ans,记读入串长度为 len,下标从 1 开始 ...

  3. Beautiful Paintings CodeForces - 651B (贪心)

    大意: 给定序列$a$, 可以任意排序, 求最大下标i的个数, 满足$a_i<a_{i+1}$. 这个贪心挺好的, 答案就为n-所有数字出现次数最大值.

  4. Codeforces 55D Beautiful Number

    Codeforces 55D Beautiful Number a positive integer number is beautiful if and only if it is divisibl ...

  5. beautiful number 数位DP codeforces 55D

    题目链接: http://codeforces.com/problemset/problem/55/D 数位DP 题目描述: 一个数能被它每位上的数字整除(0除外),那么它就是beautiful nu ...

  6. Vasya and Beautiful Arrays CodeForces - 354C (数论,枚举)

    Vasya and Beautiful Arrays CodeForces - 354C Vasya's got a birthday coming up and his mom decided to ...

  7. D - Beautiful Graph CodeForces - 1093D (二分图染色+方案数)

    D - Beautiful Graph CodeForces - 1093D You are given an undirected unweighted graph consisting of nn ...

  8. zoj Beautiful Number(打表)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2829 题目描述: Mike is very lucky, as ...

  9. zoj 2829 Beautiful Number

    Beautiful Number Time Limit: 2 Seconds      Memory Limit: 65536 KB Mike is very lucky, as he has two ...

随机推荐

  1. 计算机网络 - TCP/IP模型

    图片来自网上资料

  2. ubuntu-18.04 修改用户名密码

    1. 开放root登录 设置root密码 $ sudo passwd root 切换到root 用户 $ sudo -i 修改/etc/pam.d/gdm-autologin $ vim /etc/p ...

  3. JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取

    创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ ...

  4. 吴裕雄--天生自然PythonDjangoWeb企业开发:Django文档阅读简介

    Django是基于MVC模式的框架,虽然也被称为“MTV”的模式,但是大同小异.对我们来说,需要了解的是无论是MVC模式还是MTV模式,甚至是其他的什么模式,都是为了解耦.把一个软件系统划分为一层一层 ...

  5. nginx 书籍

    1.<实战nginx> 2.<深入理解nginx> 3.nginx开发从入门到精通 http://tengine.taobao.org/book/ 4.Nginx源码学习,配置 ...

  6. js 实现复制功能

    //复制注册地址 function copyTuiJianAddress() { try { var name = document.getElementById("share") ...

  7. 2020牛客寒假算法基础集训营4 J 二维跑步

    https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43035417 假设有i步选择不动,就有n-i步移动 假设其中又有a ...

  8. uniGUI之MainModule(12)

    1]必须设置.  一个 user 一个, 在此放数据库控件是各 user 独立 2]常用属性: 应用 MainModule 正确的方法是将连接组件放置在 MainModule 上, 并将数据集放在窗体 ...

  9. jmeter实现文件下载

    通过浏览器下载文件时,会提示选择保存路径,但是利用测试工具jmeter请求时,在页面看到请求次数是增加了,而本地没有具体下载下来的文件. 需要在具体的文件下载请求下面,添加后置处理器-bean she ...

  10. 这两天的pwn学习总结

    总是一会儿切到那里,一会儿切到那里,要明确一条主线,就是buu的题,而不是按着什么视频教程还有linux和python教程去学习.那样效率比较低. 一切为了写wp为本,不胡乱点击就是提高效率的最好办法 ...