結果

問題 No.517 壊れたアクセサリー
ユーザー fgwiebfaoish
提出日時 2019-12-03 20:48:28
言語 C#(mono)
(mono 6.6.0.161)
結果
AC  
実行時間 24 ms
コード長 3,449 Byte
コンパイル時間 928 ms
使用メモリ 17,700 KB
最終ジャッジ日時 2020-01-12 07:13:39

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
sample1.txt AC 24 ms
17,440 KB
sample2.txt AC 24 ms
17,604 KB
sample3.txt AC 20 ms
17,568 KB
sample4.txt AC 20 ms
17,432 KB
test1.txt AC 24 ms
17,428 KB
test2.txt AC 20 ms
17,584 KB
test3.txt AC 24 ms
17,524 KB
test4.txt AC 24 ms
17,532 KB
test5.txt AC 24 ms
17,528 KB
test6.txt AC 24 ms
17,456 KB
test7.txt AC 20 ms
17,700 KB
test8.txt AC 24 ms
17,416 KB
test9.txt AC 24 ms
17,672 KB
test10.txt AC 24 ms
17,552 KB
test11.txt AC 24 ms
17,540 KB
test12.txt AC 24 ms
17,516 KB
test13.txt AC 24 ms
17,688 KB
test14.txt AC 24 ms
17,500 KB
test15.txt AC 24 ms
17,464 KB
テストケース一括ダウンロード

ソースコード

diff #
using System;
using System.Collections.Generic;
using System.Collections;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;
using static System.Math;
using System.Numerics;
static class Program{
	const int mod=(int)1e9+7;
	static List<int>[] li;
	static void Main(){
		Sc sc=new Sc();
		int n=26,g=0;
		li=new List<int>[n];
		var h=new int[n];
		for(int i=0;i<n;i++){li[i]=new List<int>();}
		int m=sc.I;
		for(int i=0;i<m;i++){
			var t=sc.S;
			if(m==1&&t.Length==1){
				Console.WriteLine(t);
				return;
			}
			g+=t.Length;
			for(int j = 1;j<t.Length;j++) {li[t[j-1]-'A'].Add(t[j]-'A');}
		}
		m=sc.I;
		for(int i=0;i<m;i++){
			var t=sc.S;
			for(int j = 1;j<t.Length;j++) {li[t[j-1]-'A'].Add(t[j]-'A');}
		}

		Tp tp=new Tp(li,n);

		for(int i = 0;i<n;i++) {
			if(li[tp[i]].Count>0){
				int p=tp[i],z=1;
				while(li[p].Count>0){
					p=li[p][0];
					z++;
				}
				p=tp[i];
				if(z==g){
					Console.Write((char)(p+'A'));
					while(li[p].Count>0){
						p=li[p][0];
						Console.Write((char)(p+'A'));
					}
					Console.WriteLine();
				}
				else {Console.WriteLine(-1);}
				return;
			}
		}
		Console.WriteLine("{0}",-1);
	}
}
public class Tp{
	private bool[] b;
	private int k;
	private List<int>[] li;
	public int[] ar;
	public Tp(List<int>[] li,int n){
		this.li=li;
		b=new bool[n];
		ar=new int[n];
		k=n-1;
		for(int i=n-1;i>=0;i--){if(!b[i]){Fu(i);}}
	}
	public int this[int i]{get{return ar[i];}}
	private void Fu(int a){
		b[a]=true;
		for(int i=0;i<li[a].Count;i++){if(!b[li[a][i]]){Fu(li[a][i]);}}
		ar[k]=a;
		k--;
	}
}

public class Sc{
	public int I{get{return int.Parse(Console.ReadLine());}}
	public long L{get{return long.Parse(Console.ReadLine());}}
	public double D{get{return double.Parse(Console.ReadLine());}}
	public string S{get{return Console.ReadLine();}}
	public int[] Ia{get{return Array.ConvertAll(Console.ReadLine().Split(),int.Parse);}}
	public long[] La{get{return Array.ConvertAll(Console.ReadLine().Split(),long.Parse);}}
	public double[] Da{get{return Array.ConvertAll(Console.ReadLine().Split(),double.Parse);}}
	public string[] Sa{get{return Console.ReadLine().Split();}}
	public object[] Oa{get{return Console.ReadLine().Split();}}
	public int[] Ia2{get{return Array.ConvertAll(("0 "+Console.ReadLine()+" 0").Split(),int.Parse);}}
	public int[] Ia3(int a){return Array.ConvertAll((a.ToString()+" "+Console.ReadLine()).Split(),int.Parse);}
	public int[] Ia3(bool a,int b,bool c,int d){return Array.ConvertAll(((a?b.ToString()+" ":"")+Console.ReadLine()+(c?" "+d.ToString():"")).Split(),int.Parse);}
	public long[] La2{get{return Array.ConvertAll(("0 "+Console.ReadLine()+" 0").Split(),long.Parse);}}
	public long[] La3(int a){return Array.ConvertAll((a.ToString()+" "+Console.ReadLine()).Split(),long.Parse);}
	public long[] La3(bool a,int b,bool c,int d){return Array.ConvertAll(((a?b.ToString()+" ":"")+Console.ReadLine()+(c?" "+d.ToString():"")).Split(),long.Parse);}
	public T[] Arr<T>(int n,Func<T> f){var a=new T[n];for(int i=0;i<n;i++){a[i]=f();}return a;}
	public T[] Arr<T>(int n,Func<int,T> f){var a=new T[n];for(int i=0;i<n;i++){a[i]=f(i);}return a;}
	public T[] Arr<T>(int n,Func<string[],T> f){var a=new T[n];for(int i=0;i<n;i++){a[i]=f(Console.ReadLine().Split());}return a;}
	public T[] Arr<T>(int n,Func<int,string[],T> f){var a=new T[n];for(int i=0;i<n;i++){a[i]=f(i,Console.ReadLine().Split());}return a;}
}
0