【HDU 3183】 字符串处理
2012-11-07 00:18
337 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183
题目大意:给你一串数字,要你删去n个数字,使得删去n个数字后数值最小。
解题思路:
蛋疼的水题,搞了我一天。开始是暴力模拟,各种测试对但就是过不了。所以换了个写法。
思路主要是这样的: 因为需要你删除m个数使得结果最小,所以每次对字符串进行一次遍历,从前往后,只要a[i]>a[j] (j的位置为i后面未标记的第一个) 则对a[i]进行一次标记(赋赋值)将其除外,进行n次遍历,这样就删除了n个数字。因为删除的都是和后面比较相比下大的,所得结果当然就最小了。
题目大意:给你一串数字,要你删去n个数字,使得删去n个数字后数值最小。
解题思路:
蛋疼的水题,搞了我一天。开始是暴力模拟,各种测试对但就是过不了。所以换了个写法。
思路主要是这样的: 因为需要你删除m个数使得结果最小,所以每次对字符串进行一次遍历,从前往后,只要a[i]>a[j] (j的位置为i后面未标记的第一个) 则对a[i]进行一次标记(赋赋值)将其除外,进行n次遍历,这样就删除了n个数字。因为删除的都是和后面比较相比下大的,所得结果当然就最小了。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { int n, i, j, k; char f[1024]; int a[1024]; while(scanf("%s%d",f,&n)!=EOF) { int len=strlen(f); memset(a,0,sizeof(a)); for(i=0; i<len; i++) a[i]=f[i]-'0'; for(i=0; i<n; i++) for(j=0; j<len; j++) { if(a[j]>0) { for(k=j+1; k<len; k++) { if(a[k]>=0) break; } if(a[j]>a[k]) { a[j]=-1; break; } } } int flag=0; for(i=0; i<len; i++) { if(a[i]<0||(!flag&&a[i]==0)) { continue; } else { flag=1; printf("%d",a[i]); } } if(!flag) cout << 0; cout << endl; } return 0; }
相关文章推荐
- HDU 2054 A == B ? 字符串处理
- HDU_1113_字符串处理
- hdu--1073--字符串处理
- HDU 1013 Digital Roots 数字根 字符串处理基础题
- hdu 1039 连续字符串处理
- HDU-1274-展开字符串(dfs分段字符串处理)
- hdu 2328 字符串处理Corporate Identity
- HDU 1073 Online Judge (字符串处理,简单题)
- HDU1020(字符串处理)
- HDU 1073 Online Judge (字符串处理,格式判断的好题!!!!)
- HDU1894——字符串处理
- HDU 2074 叠筐(基础字符串处理)
- HDU-1039-Easier Done Than Said?(简单字符串处理)
- hdu 1238 字符串处理 Substrings
- hdu 2206IP的计算(sscanf的使用 & 字符串判断处理)
- hdu 6096 ac自动机 和 处理字符串分段输入
- HDU 1062 Text Reverse 字符串处理
- HDU 2399 GPA(简单字符串的处理)
- HDU 5414 CRB and String(字符串处理)——多校练习10
- HDU 5056 字符串处理