回答
[id:lethevert:20070113:p1]
とりあえず、特にひねりもなく。
#include <iostream> using namespace std; class CharStack { private: char *a, *i; public: CharStack(int size) { i = a = new char[size];} ~CharStack() { delete[] a;} void push(char c) { *(i++) = c;} char pop() { return (i==a)?0:*(--i);} char top() { return (i==a)?0:*(i-1);} }; class CharQueue { private: const char *a; public: CharQueue(const char *s) { a = s;} char get() { return *(a++);} }; bool solve(CharQueue &source, CharQueue &problem, CharStack &stack) { char check = problem.get(); //if end if (!check) return !stack.pop(); //check stack if (stack.top() == check) { stack.pop(); cout << "*"; return solve(source, problem, stack); } //read source char in; while (in = source.get()) { cout << in; stack.push(in); if (check == in) { stack.pop(); cout << "*"; return solve(source, problem, stack); } } //fail return false; } int main (int argc, char **argv) { const char *input = (argc>1)?argv[1]:"EASY"; CharQueue source("EASY"), problem(input); CharStack stack(4); bool b = solve(source, problem, stack); cout << endl << (b?"OK":"NG"); }