codeforce-600C. Make Palindrome(贪心)

http://codeforces.com/problemset/problem/600/C;

题意:给你一个小写字母组成的英文串,将它转换为回文串,要求,改变的字母的个数最小,移动字母不算改变字母。

所得的串字典序是最小的。最后输出所得到的串。

思路:要求改变的字母数最小那么用贪心的思想,就把原来的字母尽可能多的填入要求的串中。

首先,先把原串中的字母统计出来,开个数组存对应的字符的个数,然后从‘a’开始循环,如果对应字母的个数大于1;

如果是偶数个的话,就在所求串两端一边加一个,可以正好加完,若是奇数个的话那么按这样的操作,最后就剩下一个,那么把它加入队列。

最后操作队列中的单个的,然后补一个加到串的两端,直到串被补满。

然后再对串的一半排下序就可以了。

  1 #include<stdio.h>
  2 #include<algorithm>
  3 #include<iostream>
  4 #include<string.h>
  5 int cmp(const void*p,const void*q);
  6 char a[100005*2];
  7 char b[100005*2];
  8 char c[100005*2];
  9 char bb[100005*2];
 10 int aa[26];
 11 #include<queue>
 12 using namespace std;
 13 int main(void)
 14 {
 15     int n,i,j,k,p,q,l,z;
 16     while(scanf("%s",a)!=EOF)
 17     {
 18         queue<int>que;
 19         z=0;
 20         memset(aa,0,sizeof(aa));
 21         l=strlen(a);
 22         for(i=0; i<l; i++)//统计对应的字母有多少个
 23         {
 24             aa[a[i]-'a']++;
 25         }
 26         int t=0;
 27         for(i=0; i<26; i++)
 28         {
 29             if(aa[i]!=0)
 30             {
 31                 if(aa[i]>=2)//大于2的先加在串的两端
 32                 {
 33                     while(aa[i]>1)
 34                     {
 35                         aa[i]-=2;
 36                         a[t]=i+'a';
 37                         a[l-1-t]=i+'a';
 38                         t++;
 39                         z+=2;
 40                     }
 41                 }
 42                 if(aa[i]==1) que.push(i);//剩下1的入队
 43 
 44             }
 45 
 46 
 47         }
 48         while(!que.empty())
 49         {
 50             int f=que.front();
 51             que.pop();
 52             if(z>=l)
 53             {
 54                 break;
 55             }
 56             while(aa[f]>0)
 57             {
 58                 aa[f]-=2;
 59                 a[t]=f+'a';
 60                 a[l-1-t]=f+'a';
 61                 t++;
 62                 z+=2;
 63                 if(z>l)
 64                 {
 65                     break;
 66                 }
 67             }
 68             if(z>=l)//当满了就跳出
 69             {
 70                 break;
 71             }
 72         }
 73         int uu;
 74         if(l%2==0)//找串的一半(分奇数偶数讨论)
 75         {
 76             uu=l/2;
 77         }
 78         else uu=(l-1)/2;
 79         for(i=0; i<uu; i++)
 80         {
 81             b[i]=a[i];
 82         }
 83         qsort(b,uu,sizeof(char),cmp);//对串的一半排序
 84         for(i=0; i<uu; i++)
 85         {
 86             printf("%c",b[i]);
 87         }
 88         if(l%2==1)
 89         {
 90             printf("%c",a[(l)/2]);
 91         }
 92         for(i=uu-1; i>=0; i--)
 93         {
 94             printf("%c",b[i]);
 95         }
 96         printf("\n");
 97 
 98     }
 99     return 0;
100 }
101 int cmp(const void*p,const void*q)
102 {
103     char *w=(char*)p;
104     char *u=(char*)q;
105     return (*w-'a')-(*u-'a');
106 }

 

转载于:https://www.cnblogs.com/zzuli2sjy/p/5008089.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle触发器没有效果,触发器不起作用,各位帮忙看看什么原因?

测试数据模型如下&#xff1a;Create Table test_c (Id Number,seq Number,state varchar2(5));select a.*,rowid from test_c aInsert Into test_cValues(1011,101,00A);Insert Into test_cValues(1012,101,00A);Insert Into test_cValues(1021,102,00A);Insert Into test_cVa…

10个我最喜欢问程序员的面试问题

最近我拜读很多文章&#xff0c;都是介绍面试问题的&#xff0c;我真心不理解&#xff0c;面试官代表公司想要聘用的是最优秀的程序员&#xff0c;那就意味着需要想出一些有意义的面试问题。如果你就提一些毫无用处的垃圾问题&#xff0c;那么很容易遗漏很多能干的程序员。当然…

oracle动态性能视图和静态,oracle最重要的9个动态性能视图

v$session v$session_wait (在10g里功能被整合,凑合算1个吧.)v$processv$sqlv$sqltextv$bh (更宁愿是x$bh)v$lockv$latch_childrenv$sysstatv$system_event按组分的几组重要的性能视图1。System 的 over viewv$sysstat , v$system_event , v$parameter2。某个session 的当前情况…

glTF格式初步了解

glTF格式初步了解近期看到Qt 3D的进展。偶然了解到了一种新的格式&#xff1a;glTF格式。这样的格式据说比现有的3D格式更加符合OpenGL应用的须要。这引起了我的好奇。于是我在Qt 3D的外部链接中找到了有关glTF的相关链接。上海萌梦信息科技有限公司&#xff08;微博&#xff1…

【】局部刷新:

【】局部刷新&#xff1a; //页面加载时绑定按钮点击事件$(function(){ $("#按钮id").click(function(){ refresh(); });});//点击按钮调用的方法function refresh(){ window.location.reload();//刷新当前页面. //或者下方刷新方法 //par…

技术贴-搜狗打字

超强技术帖&#xff1a;遇到不会读的字&#xff0c;怎么用拼音打出来&#xff1f;】方法很简单&#xff0c;就是先打个“u”然后打各个部首的读音&#xff0c;就能在拼音输入法中打出来哦。比如&#xff0c;骉&#xff0c;可以输入umamama&#xff0c;输入法就会自动出现“骉”…

【第二十七章】 springboot + zipkin(brave-okhttp实现)

本文截取自&#xff1a;http://blog.csdn.net/liaokailin/article/details/52077620 一、前提 1、zipkin基本知识&#xff1a;附8 zipkin 2、启动zipkin server&#xff1a; 2.1、在官网下载服务jar&#xff0c;http://zipkin.io/pages/quickstart.html&#xff0c;之后使用命令…

Oracle 数据定义语言,oracle 数据定义语言(DDL)语法

DDL语言包括数据库对象的创建(create)、删除(drop)和修改(alter)的操作1.创建表语法create table table_name(column_name datatype [null | not null],column_name datatype [null | not null],..........[constraint])constraint 是为表中的列设置约束&#xff0c;常见的有…

Android内存泄漏问题(一)

前言 不少人认为JAVA程序&#xff0c;因为有垃圾回收机制&#xff0c;应该没有内存泄露。 其实如果我们一个程序中&#xff0c;已经不再使用某个对象&#xff0c;但是因为仍然有引用指向它&#xff0c;垃圾回收器就无法回收它&#xff0c;当然该对象占用的内存就无法被使用&…

向上弹出菜单jQuery插件

插件名&#xff1a;柯乐义英文名&#xff1a;Keleyijs文件名称&#xff1a;jquery.keleyi.js插件功能&#xff1a;该插件可以让你轻易地在页面上构建一个向上弹出的二级菜单。支持浏览器&#xff1a;keleyi 0.1.4版本支持IE6以及以上、Chrome、火狐(Firefox)、欧朋(Opera)、Saf…

oracle在线sql数据库设计,一款在线ER模型设计工具,支持MySQL、SQLServer、Oracle、Postgresql...

在线QQ客服&#xff1a;1922638专业的SQL Server、MySQL数据库同步软件介绍一个在线ER模型生成工具&#xff0c;该工具可以在线为多个数据库的DDL文件生成ER模型图&#xff0c;并支持MySQL&#xff0c;SQLServer&#xff0c;Oracle&#xff0c;PostgreSQL和其他数据库。主要功能…

_M_invoke(_Index_tuple_Indices...)

2019独角兽企业重金招聘Python工程师标准>>> [hadoopiZ25s7cmfyrZ C_script]$ cat test_thread_a.cpp #include <iostream> #include <atomic> #include <thread> #include <vector>std::atomic<int> global_counter(0);void increa…

十年后2023年再读这篇文章,看看我将会怎么样?

http://blog.csdn.net/wojiushiwo987/article/details/8453881看到一篇文章不错【清华差生10年奋斗经历】 &#xff0c;写给将要工作的自己&#xff0c;十年后2023年再读这篇文章&#xff0c;看看我将会怎么样&#xff1f; 在2012年收关时刻&#xff0c;看到如此激励的文章&…

1203正规式转换为有穷自动机

1 #include<stdio.h>2 #include <ctype.h>3 #define ok 14 #define error 05 #define MAXREGLUARLONG 406 #define MAXSTATELONG 40 7 #define MAXCAHRSLONG 40 8 typedef int state;9 int iCurrentState0; //初态以1开始10 int iPreState0;11 in…

fasttext的基本使用 java 、python为例子

fasttext的基本使用 java 、python为例子 今天早上在地铁上看到知乎上看到有人使用fasttext进行文本分类&#xff0c;到公司试了下情况在GitHub上找了下&#xff0c;最开始是c版本的实现&#xff0c;不过有Java、Python版本的实现了&#xff0c;正好拿下来试试手&#xff0c; p…

oracle spring 分页查询,SpringJDBC 调用oracle 通用存储过程分页

我博客前面有写道SpringJDBC调用通用的Oracle存储过程,今天来讲一下通用的Java存储过程带分页的功能,其中里面还有动态查询的SQL拼接,好的,先上代码1.Java代码Autowiredprivate JdbcTemplate jdbcTemplate;/**分页查询* return*/ResponseBodyRequestMapping(value "/find…

宝宝头三年至关重要,不看悔掉肠子

http://www.nowamagic.net/librarys/eight/posts/1885以下是一个早教工作者分享他关于现代父母早期教育中出现的问题和多数父母的误区。正如作者问自己的&#xff1a;“在孩子人生最重要的头三年&#xff0c;我做对了吗&#xff1f;在我的引导下&#xff0c;她能保持强烈的探索…

2015年底总结

2015-12-06 16:17&#xff0c;今天是周日&#xff0c;不需要加班的&#xff0c;到公司看看书&#xff0c;写写代码的&#xff0c;突然想到又是年底了&#xff01;需要写点东西来记录总结一下2015年了 年初的时候&#xff0c;入职现在这家成都游戏公司&#xff0c;到现在差不多也…

python脚本

01.用户三次登录锁定猜年龄游戏02.购物车省县市三级联动03.函数、文件操作实现数据增删改查---low版本04.ATM购物商城05.模拟计算器持续更新中...脚本很low&#xff0c;但我一直在学。。。转载于:https://blog.51cto.com/lyndon/1947437

oracle 命令日志输出,ORACLE常用命令日志

第一章&#xff1a;日志管理1.forcing log switchessql> alter system switch logfile;2.forcing checkpointssql> alter system checkpoint;3.adding online redo log groupssql> alter database add logfile [group 4]sql> (/disk3/log4a.rdo,/disk4/log4b.rdo) …