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

分析:

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

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

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

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

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

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 200000 + 10;
char s[MAXN];
map<int, int> mp;
int len;
vector<int> v;
bool judge(){
for(int i = len - 1; i >= 0; --i){
int t;
if(i == 0) t = 1;
else t = 0;
--mp[s[i] - '0'];
for(int j = s[i] - '0' - 1; j >= t; --j){
++mp[j];
v.clear();
for(int k = 0; k < 10; ++k){
if(mp[k] & 1){
v.push_back(k);
}
}
int l = v.size();
if(l <= len - i - 1){
for(int k = 0; k < i; ++k){
printf("%c", s[k]);
}
printf("%d", j);
for(int k = 0; k < len - i - 1 - l; ++k){
printf("9");
}
sort(v.begin(), v.end());
for(int k = l - 1; k >= 0; --k){
printf("%d", v[k]);
}
printf("\n");
return true;
}
--mp[j];
}
}
return false;
}
int main(){
int t;
scanf("%d", &t);
while(t--){
mp.clear();
scanf("%s", s);
len = strlen(s);
for(int i = 0; i < len; ++i){
++mp[s[i] - '0'];
}
if(!judge()){
for(int i = 0; i < len - 2; ++i){
printf("9");
}
printf("\n");
}
}
return 0;
}

  

最新文章

  1. Android立体旋转动画实现与封装(支持以X、Y、Z三个轴为轴心旋转)
  2. 精通Web Analytics 2.0 (6) 第四章:点击流分析的奇妙世界:实际的解决方案
  3. Android基于mAppWidget实现手绘地图(七)–根据坐标添加地图对象
  4. windows端口备忘
  5. CPS冥想 - 1 重新审视CPS
  6. poj3347Kadj Squares
  7. 菜鸟学习Hibernate——缓存
  8. TF-IDF与余弦相似性的应用(二):找出相似文章
  9. 开发部署一个简单的Servlet
  10. vmware vms migration to openstack
  11. poj1305:概念水题
  12. easyui datagrid datagrid-filter bug
  13. 安装Windows操作系统的驱动程序(驱动精灵版) - 进阶者系列 - 学习者系列文章
  14. SecureCRT连接虚拟机中的Linux系统(Ubuntu)_Linux教程
  15. [css 揭秘]:CSS编码技巧
  16. 如何避免 async/await 地狱
  17. 2016移动端Android新技术综合预览--好文不多,这一篇就足够
  18. Flask请求流程超清大图
  19. usrp使用
  20. CDOJ 1964 命运石之门【最短路径Dijkstra/BFS】

热门文章

  1. 启动named服务报错!
  2. 第二十九节: Asp.Net Core零散获取总结(不断补充)
  3. 关于MQTT连接的属性
  4. mybatis 无效字符
  5. 文本输入框UITextField和UITextView
  6. SpringBoot与Mybatis-plus整合,代码生成mvc层
  7. 找出crontab表达式内符合的下一次出发时间点(经典!!!)
  8. Java基础 -4.6
  9. 「CH6101」最优贸易
  10. 关于Simulink的sample time的问题