Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var s:string;
- i,n,f,check:integer;
- a,b,c:boolean;
- k:array[1..30]of int64;
- f1,f2:text;
- begin
- assign(f1,'input.txt');
- assign(f2,'output.txt');
- reset(f1);
- rewrite(f2);
- readln(f1,n);
- readln(f1,s);
- k[1]:=0; //тут мы
- k[2]:=2; //заполняем
- k[3]:=6; //варинты
- k[4]:=14;//комбинаций
- k[5]:=42;//2 и 5
- k[6]:=58;//дальше было влом
- if s[1]='*' then a:=true; //проверяем на наличие в 1 символе нуля
- if (pos('2',s)<>0)or(pos( '5',s)<>0) then b:=true; //если есть 2 или 5, то нету 3
- if pos('3',s)<>0 then c:=true; //наоборот
- if (pos('3',s)<>0)and(pos('5',s)<>0) then begin writeln(f2,0); close(f2); halt; end; //нахуй
- if (pos('3',s)<>0)and(pos('2',s)<>0) then begin writeln(f2,0); close(f2); halt; end; //уходим
- if (pos('4',s)<>0)or(pos('6',s)<>0) then begin writeln(f2,0); close(f2); halt; end; //если
- if (pos('7',s)<>0)or(pos('9',s)<>0) then begin writeln(f2,0); close(f2); halt; end; //есть
- while (pos('2',s)<>0)and(s[length(s)-pos('2',s)+1]='5') do begin
- delete(s,length(s)-pos('2',s)+1,1); //удаляем "зеркальные" 2 и 5
- delete(s,pos('2',s),1); end;
- while (pos('2',s)<>0)and(s[length(s)-pos('2',s)+1]='*') do begin
- delete(s,length(s)-pos('2',s)+1,1); //удаляем "зеркальные" 2 и *, т.к. вместо звездочки может быть лишь 5
- delete(s,pos('2',s),1); end;
- while (pos('5',s)<>0)and(s[length(s)-pos('5',s)+1]='*') do begin
- delete(s,length(s)-pos('5',s)+1,1); //аналогично
- delete(s,pos('5',s),1); end;
- for i:=1 to (length(s) div 2) do
- if (s[i]='*')and(s[length(s)-i+1]='*') then inc(check);
- f:=(length(s) div 2)-check; //считаем, сколько у нас может быть пар 2-5 вместо звездочек
- if (pos('2',s)<>0)or(pos('5',s)<>0) then begin writeln(f2,0); close(f2); halt; end; //если у нас после удаления остались 2 и 5, то нахуй выходим
- while (pos('1',s)<>0) do //удаеляем, т.к. эти числа всегда зеркальны
- delete(s,pos('1',s),1);
- while (pos('3',s)<>0) do
- delete(s,pos('3',s),1);
- while (pos('8',s)<>0) do
- delete(s,pos('8',s),1);
- while (pos('0',s)<>0) do
- delete(s,pos('0',s),1);
- if (length(s)=0)or(s[1]=' ') then begin writeln(f2,1); close(f2); halt; end; //если длина 0, то мы удалили все, значит 1 вариант
- if length(s)=1 then if a=true then begin writeln(f2,3); close(f2); halt; end else begin writeln(f2,4); close(f2); halt; end; //при 1 выводим
- if (length(s) div 2)<check then k[length(s)]:=0 else if length(s)>f then k[length(s)]:=k[length(s)-f] else k[length(s)]:=k[1]; //эта хуйня вообще хз как работает/должна работать
- if a=false then begin //если 1 символ не '*' то->>
- if c=true then writeln(f2,exp(length(s)*ln(4))) else //хуярим непонятную формулу 4^length(s) если есть тройка
- if b=true then writeln(f2,k[length(s)]+exp(length(s)*ln(3))) else //аналогично, только добавляем комбинации с 2/5
- if (c=false)and(b=false) then writeln(f2,exp(length(s)*ln(4))+k[length(s)]); //все варианты, при остутсвии 2/3/5
- end else
- if c=true then writeln(f2,exp(length(s)*ln(4)-ln(4))) else //тоже самое, только при первом символе '*'
- if b=true then writeln(f2,k[length(s)]+exp(length(s)*ln(3)-ln(3))) else
- if (c=false)and(b=false) then writeln(f2,exp(length(s)*ln(4)-ln(4))+k[length(s)]);
- //в формулах уверен на 50%
- close(f2);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement