結果

問題 No.263 Common Palindromes Extra
ユーザー deryuderyuyoderyuderyuyo
提出日時 2015-08-16 20:42:17
言語 C++11
(gcc 11.4.0)
結果
TLE  
実行時間 -
コード長 1,067 bytes
コンパイル時間 229 ms
コンパイル使用メモリ 35,816 KB
実行使用メモリ 13,756 KB
最終ジャッジ日時 2024-07-18 09:55:05
合計ジャッジ時間 9,725 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 TLE -
testcase_01 AC 1 ms
6,944 KB
testcase_02 AC 24 ms
6,944 KB
testcase_03 TLE -
testcase_04 -- -
testcase_05 -- -
testcase_06 -- -
testcase_07 -- -
testcase_08 -- -
testcase_09 -- -
testcase_10 -- -
testcase_11 -- -
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:8:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
    8 |         scanf("%s %s", S, T);
      |         ~~~~~^~~~~~~~~~~~~~~

ソースコード

diff #

char S[500002], T[500002];
#include<cstdio>
#include<list>
int main() {
	int n = 0, d, e, f, g;
	std::list<int> P;
	auto it(std::begin(P));
	scanf("%s %s", S, T);
	for (f = 0; S[f]; f++) {
		P.clear();
		for (g = 0; T[g]; g++) {
			if (T[g] == S[f]) {
				P.push_back(g);
				n++;
			}
		}
		for (d = 1; !P.empty() && d <= f && S[f - d] == S[f + d]; d++) {
			for (it = std::begin(P); it != std::end(P);) {
				e = *it;
				if (e >= d && S[f - d] == T[e - d] && S[f + d] == T[e + d]) {
					n++;
					it++;
				}
				else {
					it = P.erase(it);
				}
			}
		}
	}
	for (f = 0; S[f]; f++) {
		if (S[f] == S[f + 1]) {
			P.clear();
			for (g = 0; T[g]; g++) {
				if (S[f] == T[g] && S[f + 1] == T[g + 1]) {
					P.push_back(g);
					n++;
				}
			}
			for (d = 1; !P.empty() && d <= f && S[f - d] == S[f + d+1]; d++) {
				for (it = std::begin(P); it != std::end(P);) {
					e = *it;
					if (e >= d && S[f - d] == T[e - d] && S[f + d+1] == T[e + d+1]) {
						n++;
						it++;
					}
					else {
						it = P.erase(it);
					}
				}
			}
		}
	}
	printf("%d\n", n);
}
0