using System;
using System.Collections.Generic;
using System.Linq;
public class Demo
{
public static void Main()
{
int count = 100000;
long s;
s = DateTime.Now.Ticks;
for(int x=0; x<count; x++)
Test1();
Console.WriteLine( (DateTime.Now.Ticks-s).ToString() );
s = DateTime.Now.Ticks;
for(int x=0; x<count; x++)
Test2();
Console.WriteLine( (DateTime.Now.Ticks-s).ToString() );
}
public static List<List<int>> Test1()
{
var list1 = new List<int>{1,2,3,4,5};
var list2 = new List<int>{2,3};
var list3 = new List<int>{3,2};
var result = new List<List<int>>();
list1.Sort();
list2.Sort();
list3.Sort();
if(!result.Any(elm => elm.SequenceEqual(list1)))
result.Add(list1);
if(!result.Any(elm => elm.SequenceEqual(list2)))
result.Add(list2);
if(!result.Any(elm => elm.SequenceEqual(list3)))
result.Add(list3);
return result;
}
public static List<HashSet<int>> Test2()
{
var list1 = new List<int>{1,2,3,4,5};
var list2 = new List<int>{2,3};
var list3 = new List<int>{3,2};
var result = new List<HashSet<int>>();
result.Add(new HashSet<int>(list1));
result.Add(new HashSet<int>(list2));
result.Add(new HashSet<int>(list3));
result = result.Distinct(HashSet<int>.CreateSetComparer()).ToList();
return result;
}
}
IHVzaW5nIFN5c3RlbTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5MaW5xOwogCnB1YmxpYyBjbGFzcyBEZW1vCnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgIHsKICAgICAgICBpbnQgY291bnQgPSAxMDAwMDA7CiAgICAgICAgbG9uZyBzOwogICAgICAgIHMgPSBEYXRlVGltZS5Ob3cuVGlja3M7CiAgICAgICAgZm9yKGludCB4PTA7IHg8Y291bnQ7IHgrKykKICAgICAgICAgICAgVGVzdDEoKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSggKERhdGVUaW1lLk5vdy5UaWNrcy1zKS5Ub1N0cmluZygpICk7CiAgICAgICAgcyA9IERhdGVUaW1lLk5vdy5UaWNrczsKICAgICAgICBmb3IoaW50IHg9MDsgeDxjb3VudDsgeCsrKQogICAgICAgICAgICBUZXN0MigpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCAoRGF0ZVRpbWUuTm93LlRpY2tzLXMpLlRvU3RyaW5nKCkgKTsKICAgIH0KICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxMaXN0PGludD4+IFRlc3QxKCkKICAgIHsKICAgICAgICB2YXIgbGlzdDEgPSBuZXcgTGlzdDxpbnQ+ezEsMiwzLDQsNX07CiAgICAgICAgdmFyIGxpc3QyID0gbmV3IExpc3Q8aW50PnsyLDN9OwogICAgICAgIHZhciBsaXN0MyA9IG5ldyBMaXN0PGludD57MywyfTsKICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExpc3Q8TGlzdDxpbnQ+PigpOwogICAgICAgIGxpc3QxLlNvcnQoKTsKICAgICAgICBsaXN0Mi5Tb3J0KCk7CiAgICAgICAgbGlzdDMuU29ydCgpOwogICAgICAgIGlmKCFyZXN1bHQuQW55KGVsbSA9PiBlbG0uU2VxdWVuY2VFcXVhbChsaXN0MSkpKQogICAgICAgICAgICByZXN1bHQuQWRkKGxpc3QxKTsKICAgICAgICBpZighcmVzdWx0LkFueShlbG0gPT4gZWxtLlNlcXVlbmNlRXF1YWwobGlzdDIpKSkKICAgICAgICAgICAgcmVzdWx0LkFkZChsaXN0Mik7CiAgICAgICAgaWYoIXJlc3VsdC5BbnkoZWxtID0+IGVsbS5TZXF1ZW5jZUVxdWFsKGxpc3QzKSkpCiAgICAgICAgICAgIHJlc3VsdC5BZGQobGlzdDMpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBwdWJsaWMgc3RhdGljIExpc3Q8SGFzaFNldDxpbnQ+PiBUZXN0MigpCiAgICB7CiAgICAgICAgdmFyIGxpc3QxID0gbmV3IExpc3Q8aW50PnsxLDIsMyw0LDV9OwogICAgICAgIHZhciBsaXN0MiA9IG5ldyBMaXN0PGludD57MiwzfTsKICAgICAgICB2YXIgbGlzdDMgPSBuZXcgTGlzdDxpbnQ+ezMsMn07CiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMaXN0PEhhc2hTZXQ8aW50Pj4oKTsKICAgICAgICByZXN1bHQuQWRkKG5ldyBIYXNoU2V0PGludD4obGlzdDEpKTsKICAgICAgICByZXN1bHQuQWRkKG5ldyBIYXNoU2V0PGludD4obGlzdDIpKTsKICAgICAgICByZXN1bHQuQWRkKG5ldyBIYXNoU2V0PGludD4obGlzdDMpKTsKICAgICAgICByZXN1bHQgPSByZXN1bHQuRGlzdGluY3QoSGFzaFNldDxpbnQ+LkNyZWF0ZVNldENvbXBhcmVyKCkpLlRvTGlzdCgpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Cn0=