CodeChef-LUCKYSTR : Little Elephant and Strings
問題概要
長さ50以下の文字列がK+N個(K,N<50)与えられる。後ろのN個の各文字列に対して、長さが47以上であるか最初のK個を部分文字列として含むかどうか判定する問題。
解法
小さいので愚直にやって間に合う。
acceptされたコード
#include <cstdio> #include <vector> #include <string> #include <cstring> using namespace std; int N, K; vector<string> as, bs; void init(){ scanf("%d %d ", &K, &N); char buf[100]; for(int i=0; i<K; ++i){ scanf(" %s ", buf); if(buf[strlen(buf)-1] != '4' && buf[strlen(buf)-1] != '7'){ buf[strlen(buf)-1] = '\0'; } as.push_back(string(buf)); } for(int i=0; i<N; ++i){ scanf(" %s ", buf); if(buf[strlen(buf)-1] != '4' && buf[strlen(buf)-1] != '7'){ buf[strlen(buf)-1] = '\0'; } bs.push_back(string(buf)); } } bool sub(string str){ if((int)str.length() >= 47){ return true; } for(int i=0; i<K; ++i){ for(int j=0; j<(int)str.length(); ++j){ if(str.substr(j, as[i].length()) == as[i]){ return true; } } } return false; } void solve(){ for(int i=0; i<N; ++i){ puts(sub(bs[i]) ? "Good" : "Bad"); } } int main(){ init(); solve(); return 0; }