NYOJ1057寻找最大数(三)
来源:互联网 发布:linux显示包含隐藏文件 编辑:程序博客网 时间:2024/05/16 18:21
寻找最大数(三)
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。
求这个新的整数的最大值是多少。
- 输入
- 多组测试数据。
每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100). - 输出
- 每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。
- 样例输入
1990 1100 09090000078001234 6
- 样例输出
9190100
9907000008001234
**不得不说,一道简单题却花了N长时间,哎,差距还是在那摆着啊,总结:题上让你一步一步交换,你就别打小聪明一次解决,不然wa到你哭!!
先说说讨论区吧,我看好多人都直接两两一交换。。这样实在是太天真了,你以为2分的题就可以随便水吗(当然可能是我水平太菜,不过你水平高也不会看到这个的,大家就不要互相伤害了),简单的eg:12345 3交换三次,最大结果应该是41235 ,二不是什么23415 324125 的
思路:贪心算法,找一定区间的最大值(这个区间就是从当前位置后面一位!! i+1 开始到i+1+k ),然后交换x次,这个x次就是用maxpos(最大数位置)-i就好了
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>char s[1010];int main(){int k;while(~scanf("%s%d",&s,&k)){int i,j,maxpos;//记录最大位置 bool isfind;//是否找到了 char max;//每次的比较对象 for(i=0;i<strlen(s)-1 && k ;i++){max = s[i];//每次找之前初始化一下 maxpos = i;isfind = false;for(j=i+1;j<i+1+k && j<strlen(s);j++)//注意这里面的判断条件就好!一定要想一想 {if(s[j]>max){max=s[j];//改变一下比较对象 maxpos = j;isfind = true;}}if(isfind)//如果找到了就开始交换 {for(int q=maxpos;q>i;q--)//!!!这里一定要注意一步一步的交换,如果一步到位,后果很严重,简单的说就是如果你不一步一步换位的话会影响到后面的判断!! {char temp=s[q];s[q]=s[q-1];s[q-1]=temp;}k = k-maxpos+i;}}printf("%s\n",s);//输出结果,去AC把骚年!! }return 0;}
奈何我冒泡的算法如何打动你超时的心!!
0 0
- nyoj1057 寻找最大数(三)
- nyoj1057 寻找最大数(三)
- NYOJ1057寻找最大数(三)
- NYOJ1057寻找最大数(三)
- 【贪心】 nyoj1057寻找最大数(三)
- NYOJ1057:寻找最大数(三)
- nyoj1057 寻找最大数(三)
- nyoj1057最大数(三)
- nyoj1057寻找最大数3
- 寻找最大数(三)
- 寻找最大数(三)
- 寻找最大数(三)
- 寻找最大数(三)
- 寻找最大数(三)
- 寻找最大数(三)
- 寻找最大数(三)
- 寻找最大数(三)
- 寻找最大数(三)
- 傅立叶分析导论-附录
- 关于页面的背景颜色和内容文字颜色问题
- Docker简单命令
- Yarn中ResourceManager相关三大RPC协议
- 大直播时代,P2P才是降低成本的必杀技
- NYOJ1057寻找最大数(三)
- android中怎么在View构造的attrs中拿到android给的属性以及attrs属性介绍
- C/C++ 中fopen_s与fopen
- session入mysql
- MFC 中WM_消息处理对应的处理函数
- 数据类型所佔用内存大小 (200…
- HDOJ 1004 Letthe Balloon Rise (寻找最多的颜色)
- 常见问题
- 设计模式之工厂模式