結果
問題 | No.1994 Confusing Name |
ユーザー |
|
提出日時 | 2023-09-27 22:15:45 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 1,319 ms / 2,000 ms |
コード長 | 2,588 bytes |
コンパイル時間 | 3,086 ms |
コンパイル使用メモリ | 108,416 KB |
実行使用メモリ | 84,096 KB |
最終ジャッジ日時 | 2024-07-20 16:37:24 |
合計ジャッジ時間 | 14,695 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
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 string[] SList(long n) => Enumerable.Repeat(0, (int)n).Select(_ => ReadLine()).ToArray();public static void Main(){Solve();}static void Solve(){var n = NN;var s = SList(n);// var r = new Random();// var n = 50000;// var s = new string[n];// for (var i = 0; i < n; ++i)// {// var c = new char[10];// for (var j = 0; j < 10; ++j) c[j] = (char)('a' + r.Next(26));// s[i] = string.Concat(c);// }// var start = DateTime.Now;var tree = new TrieTree[10];for (var i = 0; i < tree.Length; ++i) tree[i] = new TrieTree();for (var i = 0; i < n; ++i) tree[s[i].Length - 1].Insert(s[i].ToCharArray());var ans = new int[n];for (var i = 0; i < n; ++i){var ch = s[i].ToCharArray();for (var j = 0; j < ch.Length; ++j){for (var c = 'a'; c <= 'z'; ++c){if (s[i][j] == c) continue;ch[j] = c;if (tree[s[i].Length - 1].Exists(ch)) ++ans[i];}ch[j] = s[i][j];}}WriteLine(string.Join("\n", ans));// WriteLine(string.Join(" ", ans.Take(10)));// WriteLine((DateTime.Now - start).TotalSeconds);}class TrieTree{class Node{public char Val;public Node[] Next = new Node[26];public Node(char val){Val = val;}}Node Head = new Node('a');public void Insert(char[] val){var cur = Head;for (var i = 0; i < val.Length; ++i){if (cur.Next[val[i] - 'a'] == null) cur.Next[val[i] - 'a'] = new Node(val[i]);cur = cur.Next[val[i] - 'a'];}}public bool Exists(char[] val){var cur = Head;for (var i = 0; i < val.Length; ++i){if (cur == null) return false;cur = cur.Next[val[i] - 'a'];}return cur != null;}}}