AtCoderのPAST
次のPASTの問題へ
前のPASTの問題へ
第1回PAST E SNSのログ
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("6 7");
WillReturn.Add("1 1 2");
WillReturn.Add("1 2 3");
WillReturn.Add("1 3 4");
WillReturn.Add("1 1 5");
WillReturn.Add("1 5 6");
WillReturn.Add("3 1");
WillReturn.Add("2 6");
//NYYNYY
//NNYNNN
//NNNYNN
//NNNNNN
//NNNNNY
//YNNNYN
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] wkArr = InputList[0].Split(' ').Select(X => int.Parse(X)).ToArray();
int N = wkArr[0];
string[] SArr = InputList.Skip(1).ToArray();
// [ユーザID] フォローしているユーザIDのSetな配列
HashSet<int>[] FollowSetArr = new HashSet<int>[N + 1];
for (int I = 1; I <= N; I++) {
FollowSetArr[I] = new HashSet<int>();
}
foreach (string EachStr in SArr) {
int[] SplitArr = EachStr.Split(' ').Select(X => int.Parse(X)).ToArray();
if (SplitArr[0] == 1) { //個別フォロー
FollowSetArr[SplitArr[1]].Add(SplitArr[2]);
}
if (SplitArr[0] == 2) { ///全フォロワーにフォロー返し
for (int I = 1; I <= N; I++) {
if (FollowSetArr[I].Contains(SplitArr[1])) {
FollowSetArr[SplitArr[1]].Add(I);
}
}
}
if (SplitArr[0] == 3) { //フォロワーしている人がフォローしている人をフォロー
foreach (int EachInt1 in FollowSetArr[SplitArr[1]].ToArray()) {
foreach (int EachInt2 in FollowSetArr[EachInt1]) {
FollowSetArr[SplitArr[1]].Add(EachInt2);
}
}
}
}
var sb = new System.Text.StringBuilder();
for (int I = 1; I <= N; I++) {
for (int J = 1; J <= N; J++) {
if (I == J) {
sb.Append('N');
}
else if (FollowSetArr[I].Contains(J)) {
sb.Append('Y');
}
else {
sb.Append('N');
}
}
sb.AppendLine();
}
Console.Write(sb.ToString());
}
}
解説
HashSetでフォローしてるユーザを管理してます。