Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Алгоритмы
Курсы ККДП
Дистрибутивы
Ссылки

HotLog


 

Реализация на Pascal

var s1,s2,s:string;

function check(x,y: integer):boolean;
begin
  if x+y=0 then check:=true else
  if x=0 then check:=false else
  if (s1[x]=s2[y]) or (s1[x]='?') then check:=check(x-1,y-1) else
  if s1[x]='*' then begin
    if check(x-1,y) then check:=true
      else check:=check(x,y-1);
  end
  else check:=false;
end;

begin
  assign(input, 'input.txt'); reset(input);
  assign(output, 'output.txt'); rewrite(output);
  readln(s1); readln(s2);
  if pos('?',s2)+pos('*',s2)>0 then begin s:=s1; s1:=s2; s2:=s end;
  if check(length(s1),length(s2)) then write('YES') else write('NO');
end.

Реализация на C++

#include <stdio.h>
#include <string.h>

char s1[300],s2[300],s[300];

int check(int x, int y){
  if(x+y<-1) return 1;
  if(x<0) return 0;
  if(s1[x]==s2[y]||s1[x]=='?') return check(x-1,y-1);
  if(s1[x]=='*'){
    if(check(x-1,y)) return 1; else return check(x,y-1);
  }else return 0;
}

int main(){
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);

  scanf("%s%s",s1,s2);
  if(strstr(s2,"?")||strstr(s2,"*")){
    strcpy(s,s1);
    strcpy(s1,s2);
    strcpy(s2,s);
  }
  printf("%s", check(strlen(s1)-1,strlen(s2)-1)?"YES":"NO");
  return 0;
}


Красноярский краевой Дворец пионеров, (c)2006 - 2019, E-mail: admin@acmp.ru