NYOJ 1057 寻找最大数(三)(贪心)

来源:互联网 发布:网络文学创作有前途吗 编辑:程序博客网 时间:2024/05/21 11:23

寻找最大数(三)

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。

求这个新的整数的最大值是多少。

输入
多组测试数据。
每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100).
输出
每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。
样例输入
1990 1100 09090000078001234 6
样例输出
91901009907000008001234
思路:思路很简单,就是从第一位开始,在m次交换范围内与最大值交换,直到到最后一位
有两个点要注意:
1.是m大于给定数字的长度
2.是m小于给定数字的长度
代码:
#include<stdio.h>#include<string.h>using namespace std;void swap(int &a,int &b){int temp;temp=a;a=b;b=temp;}int main(){char str[20];int num[20];int vis[20];    int n,m;while(~scanf("%s%d",str,&m)){   int n=strlen(str);    memset(num,0,sizeof(num));    for(int i=0;i<n;i++){num[i]=str[i]-'0';} int i=0;while(m>0){if(i>=n) break;int index=i;        int max=num[i];        for(int j=i;j<=n&&(j-i<=m);j++)//保证在允许交换的范围内,且不超过交换次数m        {        if(num[j]>max)        {        max=num[j];        index=j;}}if(i!=index)//初末位置不相同 {m-=(index-i);//减去当前交换次数 for(int j=index;j>i;j--)//交换 swap(num[j],num[j-1]);}i++;}for(int i=0;i<n;i++)        printf("%d",num[i]);             printf("\n");}} 
/*
测试数据:
/*测试数据*/
332 55
7908376 81
26412 78
7803299 17
1055669685993329 93
1695679945 4
244433 54
87246471881 22
586722803 73
5934693612 54
577045287 69
402047808436 49
7710972916361 96
1441930458533879 86
9278750186997489 62
4152830322935739 96
2803661015451 69
42062923624 22
9463775138 45
415486594857383283 51
889706517279 19
1090147241 34
678641 12
9303178346 11
697115604467939 92
1707 28
10448590692 89
2082513 33
31218337287390984 92
7950947886 36
18134219311867682 35
3121 22
862082035928152425 62
62905565804437 18
69181438015349 86
92932344922189532 39
774802576052608 98
798626633856 78
17099586320 100
13089718225313 88
50358932560297 42
668074941972 34
476188628924250 29
90686297914 54
10550 87
6983865 60
1253460 50
37320 7
79307140391735 42
685562691855151 11
7081826251 97
208511587832 89
6002535353 63
46704582532597668 95
868026756694756761 7
36460279294 48
3787919417378 45
541343 51
8845076 45
899 74
44824256769504557 16
8476615 17
6089536743883 37
9450 32
299206579985798 15
4493 39
710733 35
38 20
1058919329733848758 27
893699 90
143276 56
104954098377032050 73
81332 54
1268 14
672901 85
70563227634 52
4518688270037998 5
91373792774 85
5408861 84
9194561 32
3071161571 34
21382915589 53
718646619 25
913619909696679541 16
81672 64
10042703698551 49
21301 55
1878156341854856 6
3969 49
709327475802 59
3753781 11
437036 52
764835339699678983 98
25147884 30
1111586949668051 36
271103729403 36
825511 5
79748468235300 41
55998613859220091 8
195300690839678 42

/*输出结果*/
332
9877630
64221
9987320
9999866655533210
9651679945
444332
88877644211
887653220
9966543321
877755420
887644432000
9977766321110
9988755444333110
9999888777654201
9987554333322210
8665543211100
96644222032
9877654331
988887544165453323
998877651027
9744211100
876641
9873310346
999776665443110
7710
99865442100
8532210
99888774333322110
9988776540
98884312113116762
3211
988865554322221002
98665525004437
99886544331110
99998542323422132
887776655422000
988766665332
99876532100
98875333221110
99876553320502
998776644210
988876642214250
99987664210
55100
9886653
6543210
73320
99777543331100
986655621855151
8876522110
888755322110
6555333200
98877666555443220
887660256694756761
99766443220
9988777743311
544331
8876540
998
98454242676504557
8766541
9888766543330
9540
999922605785798
9443
773310
83
9998751013233848758
999863
764321
998775544332100000
83321
8621
976210
77665433220
8546188270037998
99777743321
8865410
9965411
7765311110
99885532211
987666411
999963110696679541
87621
98765541200031
32110
8875116341854856
9963
987775432200
8775331
764330
999988877666543333
88754421
9988611511466051
977433221100
855211
98877654433200
99865513859220091
999887153006036
*/
0 0
原创粉丝点击