zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    ERP SYSTEM 开发指南(一)简单模块开发
    机器学习--决策树
    机器学习---线性模型
    机器学习
    《IDA Pro 权威指南》学习
    内核漏洞利用技术
    word2vec、seq2seq
    Ring0级的探索
    ActiveX 控件的漏洞挖掘
    FTP的漏洞挖掘
  • 原文地址:https://www.cnblogs.com/zzqc/p/8989522.html
Copyright © 2011-2022 走看看