Largest Beautiful Number CodeForces - 946E (贪心)
题意:给定一个长度为偶数的数,输出小于它的最大的美丽数。如果一个数长度为偶数,且没有前导零,并存在一种排列是回文数的数为美丽数。给定的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;
- }
Largest Beautiful Number CodeForces - 946E (贪心)的更多相关文章
- Largest Beautiful Number CodeForces - 946E (贪心)
大意: 定义一个好数为位数为偶数, 且各位数字重排后可以为回文, 对于每个询问, 求小于$x$的最大好数. 假设$x$有$n$位, 若$n$为奇数, 答案显然为$n-1$个9. 若为偶数, 我们想让答 ...
- 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 开始 ...
- Beautiful Paintings CodeForces - 651B (贪心)
大意: 给定序列$a$, 可以任意排序, 求最大下标i的个数, 满足$a_i<a_{i+1}$. 这个贪心挺好的, 答案就为n-所有数字出现次数最大值.
- Codeforces 55D Beautiful Number
Codeforces 55D Beautiful Number a positive integer number is beautiful if and only if it is divisibl ...
- beautiful number 数位DP codeforces 55D
题目链接: http://codeforces.com/problemset/problem/55/D 数位DP 题目描述: 一个数能被它每位上的数字整除(0除外),那么它就是beautiful nu ...
- Vasya and Beautiful Arrays CodeForces - 354C (数论,枚举)
Vasya and Beautiful Arrays CodeForces - 354C Vasya's got a birthday coming up and his mom decided to ...
- D - Beautiful Graph CodeForces - 1093D (二分图染色+方案数)
D - Beautiful Graph CodeForces - 1093D You are given an undirected unweighted graph consisting of nn ...
- zoj Beautiful Number(打表)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2829 题目描述: Mike is very lucky, as ...
- zoj 2829 Beautiful Number
Beautiful Number Time Limit: 2 Seconds Memory Limit: 65536 KB Mike is very lucky, as he has two ...
随机推荐
- 计算机网络 - TCP/IP模型
图片来自网上资料
- ubuntu-18.04 修改用户名密码
1. 开放root登录 设置root密码 $ sudo passwd root 切换到root 用户 $ sudo -i 修改/etc/pam.d/gdm-autologin $ vim /etc/p ...
- JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取
创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ ...
- 吴裕雄--天生自然PythonDjangoWeb企业开发:Django文档阅读简介
Django是基于MVC模式的框架,虽然也被称为“MTV”的模式,但是大同小异.对我们来说,需要了解的是无论是MVC模式还是MTV模式,甚至是其他的什么模式,都是为了解耦.把一个软件系统划分为一层一层 ...
- nginx 书籍
1.<实战nginx> 2.<深入理解nginx> 3.nginx开发从入门到精通 http://tengine.taobao.org/book/ 4.Nginx源码学习,配置 ...
- js 实现复制功能
//复制注册地址 function copyTuiJianAddress() { try { var name = document.getElementById("share") ...
- 2020牛客寒假算法基础集训营4 J 二维跑步
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43035417 假设有i步选择不动,就有n-i步移动 假设其中又有a ...
- uniGUI之MainModule(12)
1]必须设置. 一个 user 一个, 在此放数据库控件是各 user 独立 2]常用属性: 应用 MainModule 正确的方法是将连接组件放置在 MainModule 上, 并将数据集放在窗体 ...
- jmeter实现文件下载
通过浏览器下载文件时,会提示选择保存路径,但是利用测试工具jmeter请求时,在页面看到请求次数是增加了,而本地没有具体下载下来的文件. 需要在具体的文件下载请求下面,添加后置处理器-bean she ...
- 这两天的pwn学习总结
总是一会儿切到那里,一会儿切到那里,要明确一条主线,就是buu的题,而不是按着什么视频教程还有linux和python教程去学习.那样效率比较低. 一切为了写wp为本,不胡乱点击就是提高效率的最好办法 ...