#include<iostream>
#include<string.h>
using namespace std;
bool isMatching( char * str, char * reg, int n, int m, int i, int j) {
if ( i== n&& j== m) return true ;
if ( i>= n|| j>= m) return false ;
if ( reg[ j] < 'a' || reg> 'z' ) return false ;
if ( j+ 1 >= m&& reg[ j] == str[ i] ) return true ;
if ( j+ 1 >= m) return false ;
if ( reg[ j+ 1 ] == '?' ) {
//0 case
if ( isMatching( str, reg, n, m, i, j+ 2 ) ) return true ;
//1 case
if ( reg[ j] == str[ i] ) return isMatching( str, reg, n, m, i+ 1 , j+ 2 ) ;
return false ;
}
if ( reg[ j+ 1 ] == '*' ) {
//0 case
if ( isMatching( str, reg, n, m, i, j+ 2 ) ) return true ;
while ( i< n&& str[ i] == reg[ j] ) {
if ( isMatching( str, reg, n, m, i++ , j+ 2 ) ) return true ;
}
return false ;
}
if ( reg[ j] == str[ i] ) return isMatching( str, reg, n, m, i+ 1 , j+ 1 ) ;
return false ;
}
int main( ) {
char reg[ 10 ] , str[ 256 ] ;
scanf ( "%s%s" ,str, reg) ;
cout << isMatching( str, reg, strlen ( str) , strlen ( reg) , 0 , 0 ) << endl;
return 0 ;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0cmluZy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBpc01hdGNoaW5nKGNoYXIgKnN0ciwgY2hhciAqcmVnLCBpbnQgbiwgaW50IG0sIGludCBpLCBpbnQgaikgewoJaWYoaT09biYmaj09bSkgcmV0dXJuIHRydWU7CglpZihpPj1ufHxqPj1tKSByZXR1cm4gZmFsc2U7CglpZihyZWdbal08J2EnfHxyZWc+J3onKSByZXR1cm4gZmFsc2U7CglpZihqKzE+PW0mJnJlZ1tqXT09c3RyW2ldKSByZXR1cm4gdHJ1ZTsKCWlmKGorMT49bSkgcmV0dXJuIGZhbHNlOwoJaWYocmVnW2orMV09PSc/JykgewoJCS8vMCBjYXNlCgkJaWYoaXNNYXRjaGluZyhzdHIsIHJlZywgbiwgbSwgaSwgaisyKSkgcmV0dXJuIHRydWU7CgkJLy8xIGNhc2UKCQlpZihyZWdbal09PXN0cltpXSkgcmV0dXJuIGlzTWF0Y2hpbmcoc3RyLCByZWcsIG4sIG0sIGkrMSwgaisyKTsKCQlyZXR1cm4gZmFsc2U7Cgl9CglpZihyZWdbaisxXT09JyonKSB7CgkJLy8wIGNhc2UKCQlpZihpc01hdGNoaW5nKHN0ciwgcmVnLCBuLCBtLCBpLCBqKzIpKSByZXR1cm4gdHJ1ZTsKCQl3aGlsZShpPG4mJnN0cltpXT09cmVnW2pdKSB7CgkJCWlmKGlzTWF0Y2hpbmcoc3RyLCByZWcsIG4sIG0sIGkrKywgaisyKSkgcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCWlmKHJlZ1tqXT09c3RyW2ldKSByZXR1cm4gaXNNYXRjaGluZyhzdHIsIHJlZywgbiwgbSwgaSsxLCBqKzEpOwoJcmV0dXJuIGZhbHNlOwp9CgppbnQgbWFpbigpIHsKCWNoYXIgcmVnWzEwXSwgc3RyWzI1Nl07CglzY2FuZigiJXMlcyIsc3RyLCByZWcpOwoJY291dDw8aXNNYXRjaGluZyhzdHIsIHJlZywgc3RybGVuKHN0ciksIHN0cmxlbihyZWcpLCAwLCAwKTw8ZW5kbDsKCXJldHVybiAwOwp9
compilation info
prog.cpp: In function ‘bool isMatching(char*, char*, int, int, int, int)’:
prog.cpp:8: error: ISO C++ forbids comparison between pointer and integer
prog.cpp: In function ‘int main()’:
prog.cpp:32: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
stdout