CF 628C --- Bear and String Distance --- 简单贪心
2016-04-10 14:07
375 查看
CF 628C
题目大意:给定一个长度为n(n < 10^5)的只含小写字母的字符串,以及一个数d,定义字符的dis--dis(ch1, ch2)为两个字符之差,
两个串的dis为各个位置上字符的dis之和,求和给定的字符串的dis为d的字符串,若含有多个则输出任意一个,不存在输出-1
解题思路:简单贪心,按顺序往后,对每一个字符,将其变为与它dis最大的字符(a或者z),d再减去相应的dis,
一直减到d为0,剩余的字母则不变直接输出。若一直到最后一位d仍然大于0,则说明不存在,输出-1.
View Code
题目大意:给定一个长度为n(n < 10^5)的只含小写字母的字符串,以及一个数d,定义字符的dis--dis(ch1, ch2)为两个字符之差,
两个串的dis为各个位置上字符的dis之和,求和给定的字符串的dis为d的字符串,若含有多个则输出任意一个,不存在输出-1
解题思路:简单贪心,按顺序往后,对每一个字符,将其变为与它dis最大的字符(a或者z),d再减去相应的dis,
一直减到d为0,剩余的字母则不变直接输出。若一直到最后一位d仍然大于0,则说明不存在,输出-1.
/* CF 628C --- Bear and String Distance --- 简单贪心 */ #include <cstdio> #include <algorithm> using namespace std; char a[100005]; int main() { int n, k; while (scanf("%d%d", &n, &k) == 2){ scanf("%s", a); for (int i = 0; i < n; ++i){ int dis1 = a[i] - 'a'; int dis2 = 'z' - a[i]; if (dis1 < dis2){ int ddd = min(k, dis2); k -= ddd; a[i] += ddd; } else{ int ddd = min(k, dis1); k -= ddd; a[i] -= ddd; } }//for(i) k ? printf("-1\n") : printf("%s\n", a); } return 0; }
View Code
相关文章推荐
- 重构第25天 引入契约设计(Introduce Design By Contract checks)
- ASP.NET MVC4入门教程(一):入门介绍
- python基础练习(二)—— 数据分析包numpy数组操作
- Unity3d之手游资源热跟新资源探讨
- 将表达式转换为逆波兰表达式
- c++程序设计 类+ 静态成员与函数+友元
- opencv 图像阴影检测
- LARGE_INTEGER union
- Explorer内存占用偶尔变高导致卡顿
- android studio 修改gradle引用本地文件
- ROC曲线-阈值评价标准
- Rootkit总结
- 小队简介
- 装饰模式(旧恋)
- CF #April Fools Day Contest 2016 E Out of Controls
- 高性能网络服务器编程:为什么linux下epoll是最好,Netty要比NIO.2好?
- 非监督遥感影像变化检测方法——主动轮廓
- java循环练习:把100——200中不能被3整除的数输出,每四个换一行输出
- 使用 Eclipse 给 APK 签名遇到的问题及解决办法
- Unity3d之资源打包Assetbundle