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

Обсуждение задачи 1042. Центральное отопление

Why my program got WA?
Послано yellowgreen(*Jane*)^_^ 2 апр 2003 17:51
#include<stdio.h>
#include<string.h>

#define max 251

int n,total,note[max][max],result[max];

void init()
{
  int i,j,t;
  memset(note,0,sizeof(note));
  scanf("%d",&n);
  for(i=1;i<=n;i++)
    {
      scanf("%d",&t);
      while(t!=-1)
    {
      note[t][i]=1;note[t][0]=1;
      scanf("%d",&t);
    }
    }
}

int judge()
{
  int i;
  for(i=1;i<=n;i++)
    if(!note[i][0])return 1;
  return 0;
}

void change(int a,int b)
{
  int i,temp[max];
  for(i=1;i<=n;i++)temp[i]=note[a][i];
  for(i=1;i<=n;i++)note[a][i]=note[b][i];
  for(i=1;i<=n;i++)note[b][i]=temp[i];
}

void find(int a,int s)
{
  int i,j;
  for(i=s+1;i<=n;i++)
    if(note[i][a])
      {
    note[i][0]=(note[i][0]+note[s][0])%2;
    for(j=1;j<=n;j++)
      note[i][j]=(note[i][j]+note[s][j])%2;
      }
}

void work()
{
  int i,j,sum;
  if(judge()){total=1;return;}else total=0;
  for(i=1;i<=n;i++)
    {
      for(j=i;j<=n;j++)if(note[j][i])break;
      change(i,j);
      find(i,j);
    }
  for(i=n;i>0;i--)
    {
      if(!note[i][i]){total=1;return;}
      sum=note[i][0];
      for(j=i+1;j<=n;j++)if(note[i][j])sum+=result[j];
      result[i]=sum%2;
    }
}

void out()
{
  int i,j;
  if(total)printf("No solution\n");
  else
    {
      for(i=1;i<=n;i++)
    if(result[i])break;
      if(result[i])printf("%d",i);
      for(j=i+1;j<=n;j++)
    if(result[j])
      printf(" %d",j);
      printf("\n");
    }
}

int main()
{
  init();
  work();
  out();
  return 0;
}
Why my program still WA?Please help me!Thank you!
Послано yellowgreen(*Jane*)^_^ 2 апр 2003 19:31
#include<stdio.h>
#include<string.h>

#define max 300

int n,total,note[max][max],result[max];

void init()
{
  int i,j,t;
  memset(note,0,sizeof(note));
  scanf("%d",&n);
  for(i=1;i<=n;i++)
    {
      scanf("%d",&t);
      while(t!=-1)
    {
      note[t][i]=(note[t][i]+1)%2;note[t][0]=1;
      scanf("%d",&t);
    }
    }
}

int judge()
{
  int i;
  for(i=1;i<=n;i++)
    if(!note[i][0])return 1;
  return 0;
}

void change(int a,int b)
{
  int i,temp;
  for(i=1;i<=n;i++)
    {
      temp=note[a][i];
      note[a][i]=note[b][i];
      note[b][i]=temp;
    }
}

void find(int s)
{
  int i,j;
  for(i=s+1;i<=n;i++)
    if(note[i][s])
      {
    for(j=0;j<=n;j++)
      note[i][j]=(note[i][j]+note[s][j])%2;
      }
}

void work()
{
  int i,j,sum;
  if(judge()){total=1;return;}else total=0;
  for(i=1;i<=n;i++)
    {
      for(j=i;j<=n;j++)if(note[j][i])break;
      change(i,j);
      find(i);
    }
  for(i=n;i>0;i--)
    {
      if(!note[i][i]){total=1;return;}
      sum=note[i][0];
      for(j=i+1;j<=n;j++)if(note[i][j])sum+=result[j];
      result[i]=sum%2;
    }
}

void out()
{
  int i,j;
  if(total)printf("No solution\n");
  else
    {
      for(i=1;i<=n;i++)
    if(result[i])break;
      if(result[i])printf("%d",i);
      for(j=i+1;j<=n;j++)
    if(result[j])
      printf(" %d",j);
      printf("\n");
    }
}

int main()
{
  init();
  work();
  out();
  return 0;
}
Your Gauss Jordan Method is totally incorrect (-)
Послано Miguel Angel 3 апр 2003 05:15
[code deleted]

Edited by moderator 09.12.2019 18:47
I've Ac now!
Послано yellowgreen(*Jane*)^_^ 3 апр 2003 13:07
[code deleted]

Edited by moderator 09.12.2019 18:47