ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1244. Джентльмены

Why i got WA ?? pls help me.
Послано milkkung55 23 мар 2005 15:52
this is my sorce

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void main()
{
  int m,n,b,i,k,in,sum,ans=0,index,full=0,left,*weight,*bi,*result;

  scanf("%d",&m);
  scanf("%d",&n);

  bi=(int*)malloc(sizeof(int)*n);
  result=(int*)malloc(sizeof(int)*n);
  weight=(int*)malloc(sizeof(int)*n);

  for(i=0;i<n;i++)
  {  *(bi+i)=*(result+i)=*(weight+i)=0;  }

  for(i=0;i<n;i++)
  {
     scanf("%d",weight+i);
     full+=*(weight+i);
  }

  left=full-m;

  for(b=0;b<pow(2,n);b++)
  {

    sum=0;
    index=0;

    if(ans>1) break;

    for(i=n-1;i>=0;i--)
    {
      k=b;
      *(bi+(n-1-i))=(k>>i)&1;
    }

    for(i=0;i<n;i++)
    {
      if(*(bi+i)==1)
      {
    sum+=*(weight+i);
    if(ans==0)
    { *(result+index)=i+1; index++; in=index; }
      }
    }
    if(sum==left)
       ans++;
  }
  if(ans==0) printf("0");
  else if(ans>1) printf("-1");
  else if(ans==1)
    for(i=0;i<in;i++)
      printf("%d ",*(result+i));
}

Thanks a lot.
Re: Why i got WA ?? pls help me.
Послано (Mek@^__^@)Nakara Kittisirikul 23 мар 2005 16:22
test with
5
4
2
3
4
5
สิ งำงำ
Still got WA
Послано milkkung55 23 мар 2005 16:31
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void main()
{
  int n,i,in,ans=0,index,*weight,*bi,*result;
  unsigned long sum,m,left,full=0,b,k;

  scanf("%ld",&m);
  scanf("%d",&n);

  bi=(int*)malloc(sizeof(int)*n);
  result=(int*)malloc(sizeof(int)*n);
  weight=(int*)malloc(sizeof(int)*n);

  for(i=0;i<n;i++)
  {  *(bi+i)=*(result+i)=*(weight+i)=0;  }

  for(i=0;i<n;i++)
  {
     scanf("%d",weight+i);
     full+=*(weight+i);
  }

  left=full-m;

  for(b=0;b<pow(2,n);b++)
  {

    sum=0;
    index=0;

    if(ans>1) break;

    for(i=n-1;i>=0;i--)
    {
      k=b;
      *(bi+(n-1-i))=(k>>i)&1;
    }

    for(i=0;i<n;i++)
    {
      if(*(bi+i)==1)
      {
    sum+=*(weight+i);
    if(ans==0)
    { *(result+index)=i+1; index++; in=index; }
      }
    }
    if(sum==left)
       ans++;
  }
  if(ans==0) printf("0");
  else if(ans>1) printf("-1");
  else if(ans==1)
    for(i=0;i<in;i++)
      printf("%d ",*(result+i));
  free(bi);
  free(result);
  free(weight);
}