J - Min Number FZU - 2111——桶思想深化
2017-05-02 22:26
253 查看
Think:
1题意:给出一个高位数的数,交换有限次数,且首位交换后不能为零,求交换后所得到的最小数值
2自己估计的一下,暴力枚举基本超时,因此考虑是否可优化,进而尝试是否可结合桶思想,再添加限制判断条件或提前结束条件
3反思:一开始交换步骤出现错误(再度初始化思考不全面),导致Wrong Answer
vjudge题目链接
以下为Wrong Answer代码——交换步骤再度初始化不完全
以下为Accepted代码
1题意:给出一个高位数的数,交换有限次数,且首位交换后不能为零,求交换后所得到的最小数值
2自己估计的一下,暴力枚举基本超时,因此考虑是否可优化,进而尝试是否可结合桶思想,再添加限制判断条件或提前结束条件
3反思:一开始交换步骤出现错误(再度初始化思考不全面),导致Wrong Answer
vjudge题目链接
以下为Wrong Answer代码——交换步骤再度初始化不完全
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> int a[14][1004], v[14]; int main() { int T, m, i, j, k, t, cnt; char st1[1004]; scanf("%d", &T); while(T--) { cnt = 0; memset(a, 0, sizeof(a)); memset(v, 0, sizeof(v)); scanf("%s %d", st1, &m); int len = strlen(st1); for(i = 0; i < len; i++) { t = st1[i]-'0'; a[t][i] = 1; v[t]++; } if(cnt < m) { for(j = 1; j < 9; j++) { if(v[j] && (j < st1[0]-'0' || st1[0] == '0')) { for(k = 0; k < 1004; k++) { if(a[j][k]) { a[j][k] = 0; st1[k] = st1[0]; st1[0] = j + '0'; cnt++; break; } } v[j]--; break; } } } for(i = 1; i < len; i++) { if(cnt >= m) break; for(j = 0; j < 9; j++) { if(v[j] && j < st1[i]-'0') { int flag = 0; for(k = i+1; k < 1004; k++) { if(a[j][k]) { a[j][k] = 0; st1[k] = st1[i]; st1[i] = j + '0'; cnt++; v[j]--; flag = 1; break; } } if(flag) break; } } } printf("%s\n", st1); } return 0; }
以下为Accepted代码
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> int a[14][1004], v[14]; int main() { int T, m, i, j, k, t, cnt; char st1[1004]; scanf("%d", &T); while(T--) { cnt = 0; memset(a, 0, sizeof(a)); memset(v, 0, sizeof(v)); scanf("%s %d", st1, &m); int len = strlen(st1); for(i = 0; i < len; i++) { t = st1[i]-'0'; a[t][i] = 1; v[t]++; } if(cnt < m) { for(j = 1< 4000 /span>; j < 9; j++) { if(v[j] && (j < st1[0]-'0' || st1[0] == '0')) { for(k = 1; k < 1004; k++) { if(a[j][k]) { a[j][k] = 0; t = st1[0]-'0'; a[t][k] = 1; st1[k] = st1[0]; st1[0] = j + '0'; cnt++; v[j]--; break; } } } } } for(i = 1; i < len; i++) { if(cnt >= m) break; for(j = 0; j < 9; j++) { if(v[j] && j < st1[i]-'0') { int flag = 0; for(k = i+1; k < 1004; k++) { if(a[j][k]) { a[j][k] = 0; t = st1[i]-'0'; a[t][k] = 1; st1[k] = st1[i]; st1[i] = j + '0'; cnt++; v[j]--; flag = 1; break; } } if(flag) break; } } } printf("%s\n", st1); } return 0; }
相关文章推荐
- FZU 2214 变通思想 : 01背包
- FZU 2111 Min Number
- FZU-2111-Min Number
- hdu5014:number sequence对称思想
- fzu 2111 Min Number 搜索
- 发现了Number.MAX_VALUE和Number.MIN_VALUE的好处
- FZU 2111 Min Number
- fzu Problem 1649 Prime number or not
- FZU 2111 Min Number
- FZU 2111【 Min Number】
- FZU 2111 Min Number (想法题)
- fzu 2111 Min Number(贪心)
- Number lengths FZU - 1050
- FZU 2111 Min Number
- FZU - 2111 Min Number
- js中!==,===,!!;ajax流程用到xmlhttp;html5中list属性对应datalist;min、max 和 step 属性适用于date pickers、number ,range
- FZU 2111 Min Number(模拟)
- Xcode 5.x: clang: error: invalid version number in '-mmacosx-version-min=11.0'
- FZU 1649 Prime number or not (Miller-Rabin素数测试)
- fzu 2138久违的月赛之一(贪心思想)