| ||||||||||
| 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 | |||||||||
用的自己写的链表,0ms,但总共用了两个不超过六个节点的链表,却要384KB内存,也写释放函数了,大牛路过看看是否有内存泄漏/*
* poj 1416
* guzhoudiaoke@126.com
* 2011-09-11
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int target, number, max;
char str[8];
int rejected;
typedef struct link_list {
int num;
struct link_list *next;
} link_list;
link_list *list;
link_list *result;
int create_list(link_list **l)
{
(*l) = (link_list *)malloc(sizeof(link_list));
if (*l == NULL) return 0;
(*l)->next = NULL;
return 1;
}
// 鍦╪ode鍚庨潰鎻掑叆data
int insert_list(link_list *node, int data)
{
link_list *p = node->next;
link_list *new_node = (link_list *)malloc(sizeof(link_list));
if (new_node == NULL) return 0;
new_node->num = data;
node->next = new_node;
new_node->next = p;
return 1;
}
void clear_list(link_list *l)
{
link_list *p = l->next;
link_list *q;
while (p)
{
q = p;
p = p->next;
free(q);
}
}
int free_list(link_list **l)
{
clear_list(*l);
free(*l);
}
void init_list(link_list *l, char *str)
{
int len = strlen(str);
int i;
link_list *p = l;
for (i = 0; i < len; i++)
{
insert_list(p, str[i]-'0');
p = p->next;
}
}
void copy_list(link_list *from, link_list **to)
{
clear_list(*to);
link_list *p = from->next;
link_list *q = *to;
while (p)
{
link_list *node = (link_list *)malloc(sizeof(link_list));
node->num = p->num; node->next = NULL;
q->next = node;
q = q->next;
p = p->next;
}
}
void dfs(link_list *node, int sum)
{
if (node == NULL)
return;
if (sum == max)
rejected = 1;
else if (sum > max && sum <= target)
{
rejected = 0;
max = sum;
copy_list(list, &result);
}
else if (sum > target)
return;
link_list *q, *r;
r = node;
while (r->next)
{
int temp = sum + r->num*9;
r->num = r->num*10 + r->next->num;
q = r->next;
r->next = q->next;
free(q);
dfs(r, temp);
int x = r->num % 10;
r->num /= 10;
q = (link_list *)malloc(sizeof(link_list));
q->num = x;
q->next = r->next;
r->next = q;
r = r->next;
}
}
int main()
{
int i;
while (1)
{
create_list(&list);
create_list(&result);
scanf("%d%s", &target, str);
if (target == 0 && strcmp(str, "0") == 0)
break;
init_list(list, str);
int sum = 0;
link_list *p = list->next;
while (p)
{
sum += p->num;
p = p->next;
}
max = 0;
rejected = 0;
p = list->next;
dfs(p, sum);
if (rejected)
printf("rejected\n");
else if (max == 0)
printf("error\n");
else
{
printf("%d", max);
p = result->next;
while (p)
{
printf(" %d", p->num);
p = p->next;
}
printf("\n");
}
free_list(&list);
free_list(&result);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator