Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
挤进了前2000,1997留念,留念!附上源码#include<cstdio> #include<cstring> #include<algorithm> #pragma warning(disable: 4996) using namespace std; typedef pair<int, int> P; int N, M; int Len; char s[12]; int pw[] = { 1, 10, 100, 1000, 10000, 100000, 1000000 }; int get_num(int from, int to) { if (to == from) { return 0; } int t = M; t /= pw[from]; t %= pw[to - from]; return t; } P Path[12][12]; int res; P res_p; bool uni; bool dfs(int n_cut, int cur_cut, int cur_to, int cur_form, int cur_num) { if (cur_cut == n_cut) { if (cur_num <= N && cur_to == Len) { if (cur_num > res) { res = cur_num; uni = true; Path[cur_form][cur_to].first = -1; Path[cur_form][cur_to].second = -1; return true; } else if (cur_num == res) { uni = false; return false; } } return false; } if (cur_num > N) { return false; } bool flag = false; for (int i = cur_to + 1; i <= Len; i++) { int num = get_num(cur_to, i); if (num != -1) { if (dfs(n_cut, cur_cut + 1, i, cur_to, num + cur_num)) { Path[cur_form][cur_to].first = cur_to; Path[cur_form][cur_to].second = i; flag = true; } } } return flag; } void print(P p) { p = Path[p.first][p.second]; if (p.first != -1 && p.second != -1) { print(p); printf("%d ", get_num(p.first, p.second)); } } int main() { while (~scanf("%d %s", &N, s)) { if (N == 0 && s[0] == '0') { break; } Len = strlen(s); M = atoi(s); res = -1; uni = false; for (int i = 1; i <= Len; i++) { dfs(i, 0, 0, 0, 0); } if (res == -1) { printf("error\n"); continue; } if (!uni) { printf("rejected \n"); continue; } printf("%d ", res); print(res_p); printf("\n"); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator