code thanks festival 2014 B日程
B日程参加してきました。
AからEまでやるだけでF、G、Hの三問が本命の問題という感じがしましたね。
F問題まではけっこう順調に進んで、焼く肉食べれるかと思いましたが、
G問題とH問題が解けなくて残念な結果になりました。
オンサイトでは13位で、オンライン合わせると70位ぐらいで
今まででは、なかなかいい感じの結果が残せた方なので
楽しめた数少ないコンテストの一つになった気がしますw
F問題だけ載せておきます。
#include <iostream> #include <sstream> #include <cstdio> #include <map> #include <vector> #include <string> #include <algorithm> #include <functional> #include <list> #include <stack> #include <queue> #include <cstdlib> #include <tuple> #define INF 1e9 #define EPS 1e-9 #define MOD 1000000007 using namespace std; typedef list<int> L; typedef pair <int,int> P; typedef vector<int> V; typedef queue<int> Q; typedef stack<int> S; typedef map<string,int> M; string s, v, t; int main() { cin >> s >> v >> t; V res(s.size() + 1, 0); bool flag = true; for (int i = 0; i < v.size(); i++) { if (v[i] != s[i]) flag = false; } if (flag) res[v.size()] = 1; flag = true; for (int i = 0; i < t.size(); i++) { if (t[i] != s[i]) flag = false; } if (flag) res[t.size()] = 1; for (int i = 1; i < s.size(); i++) { if (res[i]) { int j = 0; flag = true; while (j < v.size()) { if (s[i+j] != v[j]) flag = false; j++; } if (flag) res[i+v.size()] += res[i]; res[i+v.size()] %= MOD; j = 0; flag = true; while (j < t.size()) { if (s[i+j] != t[j]) flag = false; j++; } if (flag) res[i+t.size()] += res[i]; res[i+t.size()] %= MOD; } } cout << res[s.size()] << endl; return 0; }