HDU-4550-贪心

卡片游戏

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 2782    Accepted Submission(s): 855


Problem Description
  小明最近宅在家里无聊,于是他发明了一种有趣的游戏,游戏道具是N张叠在一起的卡片,每张卡片上都有一个数字,数字的范围是0~9,游戏规则如下:
  首先取最上方的卡片放到桌子上,然后每次取最上方的卡片,放到桌子上已有卡片序列的最右边或者最左边。当N张卡片全部都放到桌子上后,桌子上的N张卡片构成了一个数。这个数不能有前导0,也就是说最左边的卡片上的数字不能是0。游戏的目标是使这个数最小。
  现在你的任务是帮小明写段程序,求出这个最小数。
 
Input
第一行是一个数T,表示有T组测试数据;
然后下面有T行, 每行是一个只含有0~9的字符串,表示N张叠在一起的卡片,最左边的数字表示最上方的卡片。

[Technical Specification]
T<=1000
1 <= N <= 100
 
Output
对于每组测试数据,请在一行内输出能得到的最小数。
 
Sample Input
3 565 9876543210 9876105432
 
Sample Output
556 1234567890 1678905432
 
Source
 

      一开始想的简单了,可能有"00001"这种数据没有考虑到,要使得这个数最小那么最高位就应该最小,找到最小的最高位且不能是0的位置minn,对于minn之后的元素直接按顺序接在最后就好了,对于minn前面的元素尽可能的小,不必考虑前导零因为最高位已经固定了。还有个问题就是如果有多个最小的最高位应该选尽量靠后的更优,这样的话小数尽量往前靠拢。

   

 1 #include<iostream>
 2 #include<cstring>
 3 #include<queue>
 4 #include<cstdio>
 5 #include<stack>
 6 #include<set>
 7 #include<map>
 8 #include<cmath>
 9 #include<ctime>
10 #include<time.h> 
11 #include<algorithm>
12 using namespace std;
13 #define mp make_pair
14 #define pb push_back
15 #define debug puts("debug")
16 #define LL long long 
17 #define pii pair<int,int>
18 #define eps 1e-10
19 double inf=1e20;
20 int main()
21 {
22     int t,n,m,i,j,k;
23     char s[110];
24     cin>>t;
25     while(t--){
26         string ans="";
27         scanf("%s",s);
28         n=strlen(s);
29         i=n-1;
30         while(s[i]=='0') i--;
31         int minn=i;
32         for(;i>=0;--i) if(s[i]<s[minn]&&s[i]!='0') minn=i; 
33         for(i=0;i<minn;++i){
34             if(ans==""){
35                 ans+=s[i];
36                 continue;
37             }
38             if(s[i]>ans[0]){
39                 ans+=s[i];
40             }
41             else{
42                 string tmp="";
43                 tmp+=s[i];
44                 tmp+=ans;
45                 ans=tmp;
46             }
47         }
48         cout<<s[minn]<<ans<<s+minn+1<<endl;
49     }
50     return 0; 
51 }

猜你喜欢

转载自www.cnblogs.com/zzqc/p/8989522.html