ACM 删数问题 SDUT 2072
2017-01-26 13:02
495 查看
http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2072.html
删数问题
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss
Problem Description
键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。
Input
输入有多组 每组包括原始数n,要去掉的数字数s;
Output
输出去掉s个数后最小的数
Example Input
178543 4
Example Output
13
注意前导0,和输出0的情况重叠
贪心策略:每次删去有高位到低位递增区间的末尾或者递减区间的首位,实现局部贪心
删数问题
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss
Problem Description
键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。
Input
输入有多组 每组包括原始数n,要去掉的数字数s;
Output
输出去掉s个数后最小的数
Example Input
178543 4
Example Output
13
注意前导0,和输出0的情况重叠
贪心策略:每次删去有高位到低位递增区间的末尾或者递减区间的首位,实现局部贪心
#include <iostream> #include <string> #include <cstring> #include <cstdio> using namespace std; void modify(char (&str)[102]) { int num = 0; while (str[num]=='0') num ++; int x = 0; for (int j = num ; str[j-1]!='\0'; j++) { str[x++] = str[j]; } } int main() { char arr[102]; while ((gets(arr) != NULL) && arr[0] != '0') { int n,i; cin >> n; getchar(); int len = strlen(arr); if (n==strlen(arr)) { cout << "0" << endl; break; } //数字完全删除的情况 while (n) { i=0; while (i<strlen(arr)&&arr[i]<=arr[i+1]) i++; for (int j = i; j<=strlen(arr); j++) arr[j]=arr[j+1]; n--; } //贪心策略 if (arr[0]=='0') modify(arr); //除去前导0 if (arr[0]=='\0') { cout << "0" << endl; break; } //前导0,输出0的情况 printf("%s\n",arr); } return 0; }
相关文章推荐
- sdut.acm 2012级《程序设计基础Ⅱ)》_链表 不敢死队问题
- sdut.acm区间覆盖问题
- sdut.acm 2012级《程序设计基础Ⅱ)》_动态规划 数字三角形问题
- sdut 2072 删数问题 删除几个数字之后求最大数
- sdut2072 删数问题
- SDUT 2072 删数问题
- sdut.acm活动选择问题
- sdut.acm 2012级《程序设计基础Ⅱ)》_动态规划 最长公共子序列问题
- SDUT 2072 删数问题
- sdutacm-删数问题
- ACM练习3*n+1问题
- acm-街区最短路径问题
- ACM分巧克力问题
- 关于参加ACM-ICPC的 ACMer的 个人训练问题
- SDUT-1196 排序问题
- POJ2524-宗教问题-并查集-ACM
- 山东理工大学第七届ACM校赛-最大收益问题 分类: 比赛 2015-06-26 10:25 51人阅读 评论(0) 收藏
- ACM (7) 街区最短路径问题
- NYOJ-ACM-素数距离问题
- ACMjava经典贪心区间问题,区间选点,不相交区间,区间覆盖