#include <iostream> #include <algorithm> #include <map> #include <vector> using namespace std; int main(void) { while(true){ string s, t; for(string u; getline(cin, u) && u.size(); t += u); getline( cin, s ); if( s.size() && t.size() ); else break; map<char, int> cnt; int occ = 0; map<char, int> demand; for(int i=0; i<s.size(); ++i){ ++demand[s[i]]; } const int OCC = demand.size(); vector<string> v; int i, j; i = j = 0; while( j < t.size() ){ while( i < t.size() && occ < OCC ){ char c = t[i++]; if( demand[c] && demand[c] == ++cnt[c] )++occ; } if( occ != OCC )break; while(j < i){ char c = t[j]; if( demand[c] && demand[c] == cnt[c] )break; --cnt[c]; ++j; } if(j == i)break; v.push_back( t.substr( j, i - j) ); --cnt[ t[j++] ]; --occ; } int mn = (1 << 24); for(int i=0; i<v.size(); ++i){ mn = min( mn, (int)v[i].size() ); } string u; int same_len = 0; for(int i=0; i<v.size(); ++i){ if( v[i].size() == mn ){ if( u.size() == 0 )u = v[i]; ++same_len; } } cout << same_len << endl; if( same_len )cout << endl; for(int i=0; i<u.size(); ++i){ cout << u[i]; if( (i+1) % 72 == 0 )cout << endl; } if( u.size() && u.size() != 72 )cout << endl; cout << endl; getline( cin, s ); } return 0; }
7/01/2011
AOJ1215
尺取
登録:
コメントの投稿
(
Atom
)
0 件のコメント :
コメントを投稿