HDU 3183 A Magic Lamp (单调队列)
来源:互联网 发布:如何复制淘宝图片 编辑:程序博客网 时间:2024/06/07 11:24
题目链接:HDU 3183 A Magic Lamp
题意:给定一串数字和一个n。删去n个数字,数字的位置不能变,要求剩下的数字组成的一个数最小,输出这个数。
单调队列来维护这个序列递增,弹出队列的的元素是删去的。
注意:前导0的处理 和 答案是0的处理
AC代码:
#include<stdio.h>#include<string.h>int delzero(int *a,int p){int i=p;while(!a[i]) i++;return i;}int main(){int n,len,i,p;char str[1010];int head,tail;int que[1010], num[1010];while(scanf("%s %d",str,&n)!=EOF){len=strlen(str);for(i=0;i<len;i++)num[i]=str[i]-'0';head=1,tail=0;int pos=0;for(i=0;i<len;i++){while(head<=tail && num[i]<que[tail]){tail--;n--;if(n==0)break;}if(n==0){pos=i;break;}que[++tail]=num[i];}if(!pos){p=1;while(!que[p]) p++; for(i=p;i<=tail-n;i++)printf("%d",que[i]);if(p>(tail-n))printf("0");}else{p=delzero(&que[0],1);int mark=0;for(i=p;i<=tail;i++){printf("%d",que[i]);mark=1;}p=pos;if(!mark){p=delzero(&num[0],pos);if(p>=len){printf("0\n");continue;}}for(i=p;i<len;i++)printf("%d",num[i]);}printf("\n");}return 0;}/*178543 4 1000001 1100001 212345 254321 21000 186541523 3861523 3213 1*/
1 0
- HDU 3183 A Magic Lamp (单调队列)
- hdu 3183 A Magic Lamp(RMQ或单调队列)
- hdu 3183 A Magic Lamp
- hdu 3183 A Magic Lamp
- hdu 3183 A Magic Lamp
- Hdu 3183 A Magic Lamp
- HDU 3183 A Magic Lamp
- HDU 3183 A Magic Lamp
- hdu 3183 A Magic Lamp
- hdu 3183 A Magic Lamp
- HDU 3183 A Magic Lamp
- HDU-3183-A Magic Lamp
- hdu 3183 A Magic Lamp
- HDU-3183-A Magic Lamp
- hdu 3183 A Magic Lamp
- HDU-3183-A Magic Lamp
- HDU 3183 A Magic Lamp
- A Magic Lamp HDU
- linux设备模型之i2c子系统
- CSS选择器及优先级
- [代码应用]javaSE程序递归删除文件夹下的.bak文件程序源代码
- boost 读写锁
- CFNetwork框架
- HDU 3183 A Magic Lamp (单调队列)
- app分享功能申请社交平台appkey详细教程
- ubuntu使用root权限登录的设置方法
- centos6.4安装openfire
- 计算器类
- 关于PreparedStatement插入Date类型值的方法
- Swing之俄罗斯方块
- JAVA___jQuery+AJAX_仿百度搜索功能
- Android系统隐藏高亮显示