ex.dpr

来自「tongji acm-online judge solution」· DPR 代码 · 共 102 行

DPR
102
字号
program Ural_1186(Input,Output);
type
	TIndex=Longint;
	TElementList=array[1..26,0..26]of TIndex;
var
	N:TIndex;
function GetNum(var St:String):TIndex;
begin
	Result:=0;
	while ('0'<=St[1]) and (St[1]<='9') do
	begin
		Result:=Result*10+Ord(St[1])-Ord('0');
		Delete(St,1,1);
	end;
	if Result=0 then Result:=1;
end;
procedure Analyze(var List:TElementList;St:String;Multi:TIndex);
var
	Upper,Lower,Bracket:TIndex;
	P:TIndex;
	SubSt:String;
begin
	St:=St+' ';
	while St<>' ' do
		if ('A'<=St[1]) and (St[1]<='Z') then
		begin
			Upper:=Ord(St[1])-Ord('A')+1;
			Delete(St,1,1);
			if ('a'<=St[1]) and (St[1]<='z') then
			begin
				Lower:=Ord(St[1])-Ord('a')+1;
				Delete(St,1,1);
			end
			else
				Lower:=0;
			Inc(List[Upper,Lower],GetNum(St)*Multi);
		end
		else if St[1]='(' then
		begin
			Bracket:=1;
			P:=1;
			while Bracket>0 do
			begin
				Inc(P);
				if St[P]='(' then 
					Inc(Bracket)
				else if St[P]=')' then 
					Dec(Bracket);
			end;
			SubSt:=Copy(St,2,p-2);
			Delete(St,1,p);
			Analyze(List,SubSt,GetNum(St)*Multi);
		end;
end;
procedure Formula(var List:TElementList;St:String);
var
	Multi:TIndex;
begin
	FillChar(List,SizeOf(List),0);
	St:=St+'+#';
	while St<>'#' do
	begin
		Multi:=GetNum(St);
		Analyze(List,Copy(St,1,Pos('+',St)-1),Multi);
		Delete(St,1,Pos('+',St));
	end;
end;
function IsEqual(Left,Right:TElementList):Boolean;
var
	i,j:TIndex;
begin
	Result:=false;
	for i:=1 to 26 do
		for j:=0 to 26 do
			if Left[i,j]<>Right[i,j] then 
				Exit;
	Result:=true;
end;
procedure Main;
var
	i:TIndex;
	LeftSt,RightSt:String;
	Left,Right:TElementList;
begin
	Readln(LeftSt);
	Formula(Left,LeftSt);
	Readln(N);
	for i:=1 to N do
	begin
		Readln(RightSt);
		Formula(Right,RightSt);
		Write(LeftSt);
		if IsEqual(Left,Right) then
			Write('==')
		else
			Write('!=');
		Writeln(RightSt);
	end;
end;
begin
	Main;
end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?