Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2013, 23:36   #1
nowhow
 
Регистрация: 02.11.2011
Сообщений: 6
Радость Необходимо перевести с Pascal на с++

Условие задачи на сайте тимус:
http://acm.timus.ru/problem.aspx?num=1494&locale=ru
Код:
{$APPTYPE CONSOLE}

uses
  SysUtils;

type
    arr=array [0..100005] of longint;
var
    n,i,j,k,top:LongInt;
    A,S:arr;
    proof:Boolean;

   procedure push(var S:arr;x:LongInt);
    begin
      top:=top+1;
      S[top]:x;
    end;

   procedure pop(var S:arr);
    begin
      top:=top-1;
    end;


begin

  //false-chiter; true-ne dokazano.
 proof:=True;
 read(n);
 for i:=1 to n do
  read(A[i]);
 top:=0;
 if a[1]=1 then
 else if A[1]=2 then push(s,1)
 else
 for j:=1 to (a[1]-1) do
 push(S,j);

 k:=a[1];
 for i:=2 to n do begin
   if a[i]>(s[top]+1) then begin
      if a[i]=k+1 then k:=a[i]
      else
     for j:=k+1 to a[i]-1 do begin
     push(S,j);
      if a[i]>k then k:=a[i] end
     end
    else

    if a[i]=s[top] then begin
      pop(s);
      if a[i]>k then k:=a[i]
     end
    else proof:=False;
   end;


  if proof=True then write('Not a proof')
  else write('Cheater');

end.

Последний раз редактировалось Stilet; 09.06.2013 в 09:32.
nowhow вне форума Ответить с цитированием
Старый 09.06.2013, 16:12   #2
revizor
Форумчанин
 
Аватар для revizor
 
Регистрация: 20.01.2013
Сообщений: 146
По умолчанию

Код:
#include <iostream>
#include <stdlib.h>

struct array
{
	long int arr[100005];
};

long int n, i, j, k, top;
array A, S;
bool proof;

void push(array a, long int x)
{
	top=top+1;
	S.arr[top]=x;

}

void pop(array S)
{
	top=top-1;
}

int main()
{
	proof=true;
	std::cin >> n;

	for (i=0; i<n; i++)
		std::cin >> A.arr[i];

	top=0;

	if (A.arr[1]==1)
	{
		// !!! ТУТ НЕ ЗНАЮ ЧТО ПИСАТЬ
	}
	else if (A.arr[1]==2) push(S,1);
	else
		for (j=1; j<=A.arr[1]-1; j++)
			push(S, j);

	k=A.arr[1];
	for (i=2; i<=n; i++)
	{
		if (A.arr[i]>(S.arr[i]+1))
		{
			if (A.arr[i]==k+1) k=A.arr[i];
			else
			for (j=k+1; j<=A.arr[i]-1; j++)
			{
				push(S,j);
				if (A.arr[i]>k) k=A.arr[i];
			}
		}
		else
		if (A.arr[i]==S.arr[top])
		{
			pop(S);
			if (A.arr[i]>k) k=A.arr[i];
		}
		else proof=false;
	}

	if (proof==true) std::cout << "Not a proof" << std::endl;
	else std::cout << "Cheater" << std::endl;

        system("pause");
        return 0;
}
revizor вне форума Ответить с цитированием
Старый 09.06.2013, 16:34   #3
nowhow
 
Регистрация: 02.11.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от revizor Посмотреть сообщение
Код:
#include <iostream>
#include <stdlib.h>

struct array
{
	long int arr[100005];
};

long int n, i, j, k, top;
array A, S;
bool proof;

void push(array a, long int x)
{
	top=top+1;
	S.arr[top]=x;

}

void pop(array S)
{
	top=top-1;
}

int main()
{
	proof=true;
	std::cin >> n;

	for (i=0; i<n; i++)
		std::cin >> A.arr[i];

	top=0;

	if (A.arr[1]==1)
	{
		// !!! ТУТ НЕ ЗНАЮ ЧТО ПИСАТЬ
	}
	else if (A.arr[1]==2) push(S,1);
	else
		for (j=1; j<=A.arr[1]-1; j++)
			push(S, j);

	k=A.arr[1];
	for (i=2; i<=n; i++)
	{
		if (A.arr[i]>(S.arr[i]+1))
		{
			if (A.arr[i]==k+1) k=A.arr[i];
			else
			for (j=k+1; j<=A.arr[i]-1; j++)
			{
				push(S,j);
				if (A.arr[i]>k) k=A.arr[i];
			}
		}
		else
		if (A.arr[i]==S.arr[top])
		{
			pop(S);
			if (A.arr[i]>k) k=A.arr[i];
		}
		else proof=false;
	}

	if (proof==true) std::cout << "Not a proof" << std::endl;
	else std::cout << "Cheater" << std::endl;

        system("pause");
        return 0;
}
На 2-м тесте валится
Сейчас попробую доделать и скину читателям форума результат, за перевод спасибо

Последний раз редактировалось nowhow; 09.06.2013 в 16:37.
nowhow вне форума Ответить с цитированием
Старый 09.06.2013, 17:40   #4
nowhow
 
Регистрация: 02.11.2011
Сообщений: 6
По умолчанию Вот что получилось:

Код:
#include <iostream>
#include <stack>
using  namespace std;
const int len=100001;
int main()
{
	int n,t;
	int A[len];
	cin>>n;
	for( int i(1);i<=n;i++)
	{
		cin>>t;
		A[i]=t;
	}
	stack<int> MySt;
	if(A[1]!=1)
		if(A[1]==2)
			MySt.push(1);
		else
			for(int i(1);i<=A[1]-1;i++)
				MySt.push(i);
	int temp=A[1];
	bool bVal=1;
	for(int i(2);i<=n;i++)
	{
		if(A[i]>(!MySt.empty() && MySt.top()+1))
			if(A[i]==temp+1)
				temp=A[i];
			else
				for(int j(temp+1);j<=A[i]-1;j++)
				{
					MySt.push(j);
					if(A[i]>temp)
						temp=A[i];
				}
		else
			if(!MySt.empty() && A[i]==MySt.top())
			{
				MySt.pop();
				if(A[i]>temp)
					temp=A[i];
			}
			else
				bVal=0;
	
	}
	if(bVal) cout<<"Not a proof"; else cout<<"Cheater";
		
}
НО ОШИБКА НА ТЕСТЕ:
6
3
4
2
1
5
6
Answer is "Not a proof"
А у меня неправильный ответ "Cheater"

Последний раз редактировалось nowhow; 09.06.2013 в 17:55.
nowhow вне форума Ответить с цитированием
Старый 09.06.2013, 22:26   #5
revizor
Форумчанин
 
Аватар для revizor
 
Регистрация: 20.01.2013
Сообщений: 146
По умолчанию

Я сегодня с этой задачей больше часа промучился. Хотел решить, но ничего не получилось.)
Алгоритм не понимаю
revizor вне форума Ответить с цитированием
Старый 02.04.2014, 23:58   #6
kostan3
- Дорогой, а ты ку
Форумчанин
 
Регистрация: 06.10.2012
Сообщений: 181
По умолчанию

)))
Код:
#include <iostream>
using namespace std;
int n,t1=0,t2=1,a[100001],b[100001];
int main()
{
    cin>>n;
    for (int i=1;i<=n;++i)
        scanf("%d",b+i);
    for (int i=1;i<=n;++i)
    {
        a[++t1]=i;
        for (;t1&&(a[t1]==b[t2]);--t1,++t2);
    }
    cout<<(t1 ? "Cheater" : "Not a proof");
}
acept
kostan3 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевести программу из Pascal в C++ Starget-93 Помощь студентам 2 13.11.2014 14:04
Перевести с Pascal в C++ Евгений Баранников Паскаль, Turbo Pascal, PascalABC.NET 6 16.05.2013 09:28
перевести с Pascal на СИ Vladis1av Помощь студентам 0 08.04.2013 18:37
Перевести на С++ (Pascal) spinogryz_ua Помощь студентам 4 23.11.2012 12:04
перевести с++ в pascal ApXaHreL Помощь студентам 1 19.06.2011 17:41