結果

問題 No.517 壊れたアクセサリー
ユーザー fgwiebfaoish
提出日時 2019-12-03 20:48:28
言語 C#(mono)
(mono 6.0.0.327)
結果
AC  
実行時間 35 ms
コード長 3,449 Byte
コンパイル時間 1,215 ms
使用メモリ 9,796 KB
最終ジャッジ日時 2019-12-03 20:48:31

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
sample1.txt AC 27 ms
9,736 KB
sample2.txt AC 28 ms
9,760 KB
sample3.txt AC 26 ms
9,696 KB
sample4.txt AC 28 ms
9,736 KB
test1.txt AC 26 ms
9,700 KB
test2.txt AC 28 ms
9,732 KB
test3.txt AC 26 ms
9,796 KB
test4.txt AC 27 ms
9,764 KB
test5.txt AC 28 ms
9,760 KB
test6.txt AC 29 ms
9,740 KB
test7.txt AC 29 ms
9,768 KB
test8.txt AC 35 ms
9,728 KB
test9.txt AC 29 ms
9,736 KB
test10.txt AC 28 ms
9,736 KB
test11.txt AC 29 ms
9,740 KB
test12.txt AC 27 ms
9,744 KB
test13.txt AC 29 ms
9,764 KB
test14.txt AC 29 ms
9,776 KB
test15.txt AC 29 ms
9,740 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