結果
| 問題 | No.2172 SEARCH in the Text Editor |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-10-16 21:52:20 |
| 言語 | C# (.NET 8.0.404) |
| 結果 |
AC
|
| 実行時間 | 522 ms / 2,000 ms |
| コード長 | 3,779 bytes |
| コンパイル時間 | 9,415 ms |
| コンパイル使用メモリ | 167,768 KB |
| 実行使用メモリ | 198,788 KB |
| 最終ジャッジ日時 | 2024-09-16 22:18:36 |
| 合計ジャッジ時間 | 20,898 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 49 |
コンパイルメッセージ
復元対象のプロジェクトを決定しています... /home/judge/data/code/main.csproj を復元しました (84 ms)。 MSBuild のバージョン 17.9.6+a4ecab324 (.NET) /home/judge/data/code/Main.cs(97,16): warning CS0414: フィールド 'Program.mod' が割り当てられていますが、値は使用されていません [/home/judge/data/code/main.csproj] main -> /home/judge/data/code/bin/Release/net8.0/main.dll main -> /home/judge/data/code/bin/Release/net8.0/publish/
ソースコード
using System;
using static System.Console;
using System.Linq;
using System.Collections.Generic;
class Program
{
static int NN => int.Parse(ReadLine());
static int[] NList => ReadLine().Split().Select(int.Parse).ToArray();
static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray();
public static void Main()
{
Solve();
}
static void Solve()
{
var n = NN;
var t = ReadLine();
var list = new Pair[n];
var mod = 998_244_353;
for (var i = 0; i < n; ++i)
{
var s = ReadLine();
if (s[0] == '~')
{
var c = s.Split();
var a = int.Parse(c[1]) - 1;
var b = int.Parse(c[2]) - 1;
if (list[a].IsShort && list[b].IsShort)
{
var u = list[a].Left.Concat(list[b].Left).ToArray();
if (u.Length < t.Length)
{
list[i] = new Pair(u.ToArray(), u.ToArray(), true, 0);
}
else
{
list[i] = new Pair(u.Take(t.Length - 1).ToArray(),
u.Skip(u.Length - t.Length + 1).ToArray(), false, Count(t, u));
}
}
else if (list[a].IsShort)
{
var u = list[a].Left.Concat(list[b].Left).ToArray();
list[i] = new Pair(u.Take(t.Length - 1).ToArray(),
list[b].Right, false, (list[b].Count + Count(t, u)) % mod);
}
else if (list[b].IsShort)
{
var u = list[a].Right.Concat(list[b].Left).ToArray();
list[i] = new Pair(list[a].Left,
u.Skip(u.Length - t.Length + 1).ToArray(), false, (list[a].Count + Count(t, u)) % mod);
}
else
{
var u = list[a].Right.Concat(list[b].Left).ToArray();
list[i] = new Pair(list[a].Left, list[b].Right, false, (list[a].Count + list[b].Count + Count(t, u)) % mod);
}
}
else
{
if (s.Length < t.Length)
{
list[i] = new Pair(s.ToCharArray(), s.ToCharArray(), true, 0);
}
else //if (t.Length > 1)
{
list[i] = new Pair(s.Take(t.Length - 1).ToArray(),
s.Skip(s.Length - t.Length + 1).ToArray(), false, Count(t, s.ToCharArray()));
}
// else
// {
// list[i] = new Pair(Array.Empty<char>(), Array.Empty<char>(), false, Count(t, s.ToArray()));
// }
}
}
WriteLine(list[n - 1].Count);
}
static int Count(string t, char[] u)
{
var ans = 0;
for (var i = 0; i + t.Length <= u.Length; ++i)
{
var flg = true;
for (var j = 0; j < t.Length; ++j)
{
if (t[j] != u[i + j])
{
flg = false;
break;
}
}
if (flg) ++ans;
}
return ans;
}
static int mod = 998_244_353;
class Pair
{
public char[] Left;
public char[] Right;
public bool IsShort;
public long Count;
public Pair(char[] l, char[] r, bool i, long c)
{
Left = l; Right = r; IsShort = i; Count = c;
}
}
}