设为首页 收藏本站
查看: 1611|回复: 0

hdu 3183(A Magic Lamp)模拟

[复制链接]
累计签到:13 天
连续签到:1 天
发表于 2015-8-20 12:36:24 | 显示全部楼层 |阅读模式
  problem link adress:http://acm.hdu.edu.cn/showproblem.php?pid=3183
  题目大意:给你一个整数(可能有1000位),然后你可以任意删除其中的m个数字,求删除这m个数后形成的新的数最小。不能改变数字的顺序,只能删除某数字。
  ps: 题目给出我们的数据是没有前导0的,如果我们得出的新数据有前导0,那么我们可以忽略。例如:得到00125 可以直接输出125.
  这一题彻底把我弄凌乱了,蛋疼了一下午,直接影响到接下来的比赛,这一题搞头昏脑胀的。
  还是做题的习惯不好,考虑的太不全面,应该向涛哥学习把问题弄清楚在开始做题;
  最基本的先把题目中给出的四个实例分析一下吧!
  178543 4   /*去掉7 8 5 4
  1000001 1 /*去掉1后  然后剩下000001  即1
   100001 2  /*去掉1后 变成00001 再次去掉1 就变成了0
  12345 2   /*去掉4 5
  其中,这四个实例中第一个和第四个让我获得的信息就是对这些数字进行排序然后,去掉值最大的m为数字,可是不能改变顺序,这个想法pass。
  接下来继续发现规律:如果不排序,是不是还应该去掉最大的数呢!下面的实例再次否定了我的想法。21435 如果只去掉1位,按照我的想法去掉5,变成2143,显然1435才是正确答案,所以得到了规律就是,不一定要最大数先去掉,而是与数的位数有关,也就是说从左到右,前一位的数不能大于后一位的数,如果大于就把它去掉,这样进行m次。
  这样看来本题是贪心啊!


DSC0000.gif DSC0001.gif View Code


1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 using namespace std;
5 char num[1005];
6 char ans[1005];
7 int m;
8 int main()
9 {
10     int i;
11     while(scanf("%s %d",num,&m)!=EOF)
12     {
13         memset(ans,0,sizeof(ans));
14         int len=strlen(num);
15         if(m==0)//如果m等于0的话直接输出
16         {
17             printf("%s\n",num);
18             continue;
19         }
20         int k=0;
21         for(i=0;i<len-1&&m>0;i++)//这里一定要确保m大于0
22         {
23             if(num<=num[i+1])
24             {
25                 ans[k++]=num;
26             }
27             else
28             {
29                 m--;
30                 while(ans[k-1]>num[i+1]&&m>0)//这里m一定要大于0  wa了几次
31                 {
32                     m--;
33                     k--;
34                 }
35             }
36
37         }
38         for(;i<len;i++)
39         {
40             ans[k++]=num;
41         }
42         for(i=0;i<k-m;i++)
43             if(ans!='0')
44                 break;
45         if(i+m==k)//如果去除前导0后到达的位数和已经处理的位数和一共等于k位  直接输出0就ok了
46             cout<<"0";
47         for(;i<k-m;i++)
48             cout<<ans;
49         cout<<endl;
50     }
51     return 0;
52 }
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-101640-1-1.html 上篇帖子: linux服务器操作系统,在相同环境下,哪个做lamp服务器更稳定点?哪个版本更稳定? 下篇帖子: LAMP第四部分 mysql相关
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表