题目:戳我

  题意:给定长度为n的字符串,给定初始光标位置p,支持4种操作,left,right移动光标指向,up,down,改变当前光标指向的字符,输出最少的操作使得字符串为回文。

  分析:只关注字符串n/2长度,up,down操作是固定不变的,也就是不能优化了,剩下就是left,down的操作数,细想下中间不用管,只关注从左到中间第一个要改变的位置和最后一个要改变的位置即可,具体看代码。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int M = 1e5+5;int n, p;
char str[M];
int main()  {while( ~scanf("%d %d", &n, &p ) )  {getchar();gets( str+1 );int sumchg = 0;     //up,down的操作总数int first = 0;      //第一个要改变的位置bool firstjd = true;int last = 0;       //最后一个要改变的位置for( int i=1; i<=n/2; i++ )  {int d = abs( str[i]-str[n+1-i] );if( d ) {if( firstjd )   {first = i;firstjd = false;}last = i;sumchg += min( d, 26-d );   //选择up或者down的最小操作数
            }}if( p > n/2 )       //由于回文左右对称,所以p在中间右边时也可将p当左边对称位置计算p = n+1-p;int ret = 0;if( sumchg == 0 )   {   //不需要改变输出0printf("%d\n", ret);continue;}if( first >= p )    //如果p在第一个要改变的左边,p只能向右走,即执行right操作ret += sumchg + last - p; else if( last <= p )    //如果p在最后一个要改变的右边,p只能向左走,即执行left操作ret += sumchg + p - first;elseret += min( 2*(p-first)+last-p, 2*(last-p)+p-first ) + sumchg;  //p在中间,取求向左向右走的最小值printf("%d\n", ret);}return 0;
}

转载于:https://www.cnblogs.com/TaoTaoCome/p/4700216.html

CodeForces 486C Palindrome Transformation 贪心+抽象问题本质相关推荐

  1. 贪心+构造 Codeforces Round #277 (Div. 2) C. Palindrome Transformation

    题目传送门 1 /* 2 贪心+构造:因为是对称的,可以全都左一半考虑,过程很简单,但是能想到就很难了 3 */ 4 /**************************************** ...

  2. 【Codeforces 486C】Palindrome Transformation

    [链接] 我是链接,点我呀:) [题意] 光标一开始在p的位置 你可以用上下左右四个键位移动光标(左右)或者更改光标所在的字符(上下增加或减少ascill码) 问你最少要操作多少次才能使得字符串变成回 ...

  3. codeforces D Santa Claus and a Palindrome(hash+贪心)

    思路:计算字符串的正反哈希值.如果字符串不是回文串,并且存在字符串的反串,将这两上串作为构成回文串的两边.如果字符串是回文串,一种是将其作为回文串的中间,另外一种是作为回文串的对称串来处理. 具体代码 ...

  4. Codeforces Round #277 (Div. 2) C. Palindrome Transformations 贪心

    思路:只需处理字符串的一半,即:根据右半段来修改左半段.因为同时修改对称的两个字符,所需的操作数与修改一个字符是相等的.为了使操作数最小,应该按顺序来修改. 由于对称性,可将pos > mid的 ...

  5. 【Codeforces】158B-Taxi(贪心,怎么贪咧)

         贪心   emmmm http://codeforces.com/contest/158/problem/B 题目大意:有四种旅客,四人一组,三人一组,两人一组,一人一组,一辆出租车最多可以 ...

  6. CodeForces - 1607D Blue-Red Permutation(贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,每个数字有一个颜色,如果是蓝色,每次操作则可以减一:如果是红色,每次操作则可以加一. 问有限次操作后,能否将数组变为一个长度为 nnn 的 ...

  7. CodeForces - 1481E Sorting Books(贪心+dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,每次操作可以将任意一本书放到序列的末尾,问最少需要操作多少次,才能使得相同的数字挨在一起 题目分析:不难看出,对每个位置的数都操作一次,是 ...

  8. CodeForces 176A Trading Business 贪心

    Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...

  9. codeforces 735C Tennis Championship(贪心+递推)

    Tennis Championship 题目链接:http://codeforces.com/problemset/problem/735/C --每天在线,欢迎留言谈论. 题目大意: 给你一个 n ...

最新文章

  1. MPB:宁大张德民组-对虾养殖系统微生物组样品的采集与制备
  2. NYOJ 600 花儿朵朵
  3. mysql创建一个表用来快速查询表_mysql数据库的创建表格、查询(多表查询)
  4. python 归纳 (十二)_并发队列Queue的使用
  5. mybatis和hibernate的一级、二级缓存
  6. html:(27):类和ID选择器的区别和子选择器
  7. 小程序测试用例模板_微信小程序样式:高质量小程序样式模板大全
  8. python 储蓄计划_365天储蓄计划表
  9. 学习笔记之grub应用
  10. nlp-tutorial代码注释3-3,双向RNN简介
  11. 每日英语:Foreign Tourists Skip Beijing
  12. Asp.Net(C#.VB)Array、ArrayList和List的区别
  13. SDNU 1210.通话记录
  14. Atitit uke证件编码规范与范本
  15. 使用python的Tkinter构建应用程序
  16. java连接数据库步骤
  17. U813.0 - 登录系统管理提示“缺少根元素”
  18. interface 相关知识
  19. 10G 网络变压器 10GBASE-T与1000Base-T区别
  20. 帮你学会webpack

热门文章

  1. day8网络编程,面向对象1
  2. 如何实现office不同语言界面切换
  3. 转载 maven 详解 http://www.cnblogs.com/binyue/p/4729134.html
  4. 操作Checkbox标签
  5. centos 零碎学习小记 2.
  6. IIS集成模式和经典模式 系统部署的不同
  7. McAfee:较之中国美国黑客才最令人害怕
  8. vim编辑器快捷操作
  9. js的栈堆与浅拷贝、深拷贝的理解
  10. BDB (Berkeley DB)简要数据库(转载)