FZU 1853 Number Deletion(贪心)
来源:互联网 发布:游戏多开软件 编辑:程序博客网 时间:2024/05/20 02:26
Problem 1853 Number Deletion
Accept: 83 Submit: 258
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
Given you one n-digital positive integer a,After removing any of them k( k < n) digits, the remaining figures form a new positive integer according to the origin order. For a given n-digital positive integers a and positive integer k. Now ask you to find a algorithm to minimize the remaining integer.
Input
The first line contains one integer t, represents the number of test cases.
Then following t lines,each line contain two numbers a,k (0 < a < 10^1000, k is less than the length of a).
Output
Output the mininum number after the deletion.(the number can not contain leading zero)">it means that we should ignore the leading zeros of the output number
Sample Input
1178543 4
Sample Output
13
题意:
删除k个数,使得这个数最小。
思路:
这题简直坑货,让高数位尽量小,于是就要从前向后扫,每次就删当前数前面,比自己大的数;然而注意前导0不输出。
代码:
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;const int N= 1005;char s[N];int vis[N];int main(){ int t,k; scanf("%d",&t); while(t--) { memset(vis,0,sizeof vis); scanf("%s%d",s,&k); int len=strlen(s); for(int i=1; i<len; i++) { for(int j=i-1; j>=0; j--)//从最近的删起 { if(!vis[j]&&s[j]>s[i]) vis[j]=1,k--; if(!k) break; } if(!k) break;//两次break; } if(k) { for(int i=len-1; i>=0; i--) { if(!vis[i]) vis[i]=1,k--; if(!k) break; } } int f=1; for(int i=0; i<len; i++) if(!vis[i]) { if(f&&s[i]=='0') continue; if(s[i]!='0') f=0; putchar(s[i]); } if(f) printf("0");//都是0,则输出0 puts(""); } return 0;}
另外一种用单调栈做的。代码更简单。时间复杂度O(n)。
#include<cstdio>const int maxn=1010;char num[maxn],q[maxn];int main(){ int t,i,k,tail; scanf("%d",&t); while(t--) { scanf("%s%d",num,&k); tail=0; for(i=0;num[i];i++) { while(tail&&num[i]<q[tail-1]&&k) tail--,k--; q[tail++]=num[i]; } while(k) k--,tail--; q[tail]=0; for(i=0;i<tail;i++) if(q[i]!='0') break; if(i==tail) printf("0\n"); else printf("%s\n",q+i); } return 0;}
1 0
- FZU 1853 Number Deletion(贪心)
- FZU 1853 Number Deletion
- FZU Problem 1853 Number Deletion
- FZU 1502 Letter Deletion
- FZU 1502Letter Deletion
- FZU 1502 Letter Deletion
- fzu 2111 Min Number 贪心
- fzu 2111 Min Number(贪心)
- FZU - 2111 Min Number(贪心)
- FZU OJ 2111 Min Number (贪心)
- ACM--贪心--FZU--2111--Min Number
- fzu 2051 Monster (贪心)
- FZU 2144 几何+贪心
- FZU 2019 Mountain Number
- fzu 2109 Mountain Number
- FZU 2111 Min Number
- FZU - 2109 Mountain Number
- fzu 1050 Number lengths
- leetCode #27 Remove Element
- linux模糊查询文件并删除
- 游戏架构脚本该如何来写
- uva 208 - Firetruck
- Yii2.0手册地址
- FZU 1853 Number Deletion(贪心)
- 《Java实战开发经典》第四章4.7
- 解决linux环境机器 系统时间不对
- wsdl 生成客户端
- 黑马程序员--java技术blog---第四篇:IO流(3)
- 改天记得把自己那个代码中的改成这个boost::lexical_cast
- 汇总一些网络相关的基础概念
- 《Java实战开发经典》第四章4.8
- hdu 1709 求天平不能称重的重量 动态规划