提出 #36436734
ソースコード 拡げる
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;
namespace Tasks
{
public class D
{
public static void Main()
{
using var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
Console.SetOut(sw);
Solve();
Console.Out.Flush();
}
public static void Solve()
{
var (N, M) = Scanner.Scan<int, int>();
var A = Scanner.ScanEnumerable<int>().ToArray();
var sum = A.Select(x => (long)x).Sum();
var dict = new Dictionary<int, long>();
foreach (var a in A)
{
var b = a % M;
if (!dict.ContainsKey(b)) dict[b] = 0;
dict[b] += a;
}
var K = dict.Count;
var keys = dict.Keys.ToArray();
var (map, remap) = Compress(keys);
var dsu = new DisjointSetUnion(K);
foreach (var key in keys)
{
var next = (key + 1) % M;
if (dict.ContainsKey(next))
{
dsu.Merge(map[key], map[next]);
}
}
const long inf = (long)1e18;
var answer = inf;
foreach (var group in dsu.GetGroups())
{
answer = Math.Min(answer, sum - group.Select(x => dict[remap[x]]).Sum());
}
Console.WriteLine(answer);
}
public static (Dictionary<T, int> Map, Dictionary<int, T> ReMap) Compress<T>(IEnumerable<T> source)
{
var distinct = source.Distinct().ToArray();
Array.Sort(distinct);
var map = new Dictionary<T, int>();
var remap = new Dictionary<int, T>();
foreach (var (x, i) in distinct.Select((x, i) => (x, i)))
{
map[x] = i;
remap[i] = x;
}
return (map, remap);
}
public class DisjointSetUnion
{
public int Length { get; }
private readonly int[] _parentOrSize;
public DisjointSetUnion(int length)
{
if (length < 0) throw new ArgumentOutOfRangeException(nameof(length));
Length = length;
_parentOrSize = new int[Length];
Array.Fill(_parentOrSize, -1);
}
public int Merge(int u, int v)
{
if (u < 0 || Length <= u) throw new ArgumentOutOfRangeException(nameof(u));
if (v < 0 || Length <= v) throw new ArgumentOutOfRangeException(nameof(v));
var (x, y) = (LeaderOf(u), LeaderOf(v));
if (x == y) return x;
if (-_parentOrSize[x] < -_parentOrSize[y]) (x, y) = (y, x);
_parentOrSize[x] += _parentOrSize[y];
_parentOrSize[y] = x;
return x;
}
public bool IsSame(int u, int v)
{
if (u < 0 || Length <= u) throw new ArgumentOutOfRangeException(nameof(u));
if (v < 0 || Length <= v) throw new ArgumentOutOfRangeException(nameof(v));
return LeaderOf(u) == LeaderOf(v);
}
public int LeaderOf(int v)
{
if (v < 0 || Length <= v) throw new ArgumentOutOfRangeException(nameof(v));
if (_parentOrSize[v] < 0) return v;
return _parentOrSize[v] = LeaderOf(_parentOrSize[v]);
}
public int SizeOf(int v)
{
if (v < 0 || Length <= v) throw new ArgumentOutOfRangeException(nameof(v));
return -_parentOrSize[LeaderOf(v)];
}
public IEnumerable<IReadOnlyCollection<int>> GetGroups()
{
var result = new List<int>[Length].Select(x => new List<int>()).ToArray();
for (var i = 0; i < Length; i++) result[LeaderOf(i)].Add(i);
return result.Where(x => x.Count > 0);
}
}
public static class Scanner
{
public static string ScanLine() => Console.ReadLine()?.Trim() ?? string.Empty;
public static string[] Scan() => ScanLine().Split(' ');
public static T Scan<T>() where T : IConvertible => Convert<T>(Scan()[0]);
public static (T1, T2) Scan<T1, T2>() where T1 : IConvertible where T2 : IConvertible
{
var line = Scan();
return (Convert<T1>(line[0]), Convert<T2>(line[1]));
}
public static (T1, T2, T3) Scan<T1, T2, T3>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible
{
var line = Scan();
return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]));
}
public static (T1, T2, T3, T4) Scan<T1, T2, T3, T4>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible
{
var line = Scan();
return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]), Convert<T4>(line[3]));
}
public static (T1, T2, T3, T4, T5) Scan<T1, T2, T3, T4, T5>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible
{
var line = Scan();
return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]), Convert<T4>(line[3]), Convert<T5>(line[4]));
}
public static (T1, T2, T3, T4, T5, T6) Scan<T1, T2, T3, T4, T5, T6>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible where T6 : IConvertible
{
var line = Scan();
return (Convert<T1>(line[0]), Convert<T2>(line[1]), Convert<T3>(line[2]), Convert<T4>(line[3]), Convert<T5>(line[4]), Convert<T6>(line[5]));
}
public static IEnumerable<T> ScanEnumerable<T>() where T : IConvertible => Scan().Select(Convert<T>);
private static T Convert<T>(string value) where T : IConvertible => (T)System.Convert.ChangeType(value, typeof(T));
}
}
}
提出情報
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
400 / 400 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
example0.txt, example1.txt, example2.txt |
| All |
000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, example0.txt, example1.txt, example2.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 000.txt |
AC |
87 ms |
28164 KiB |
| 001.txt |
AC |
135 ms |
43604 KiB |
| 002.txt |
AC |
131 ms |
49812 KiB |
| 003.txt |
AC |
278 ms |
81236 KiB |
| 004.txt |
AC |
272 ms |
81388 KiB |
| 005.txt |
AC |
268 ms |
81656 KiB |
| 006.txt |
AC |
277 ms |
81140 KiB |
| 007.txt |
AC |
131 ms |
49972 KiB |
| 008.txt |
AC |
129 ms |
43680 KiB |
| 009.txt |
AC |
132 ms |
43436 KiB |
| 010.txt |
AC |
94 ms |
29992 KiB |
| 011.txt |
AC |
189 ms |
60556 KiB |
| 012.txt |
AC |
279 ms |
91144 KiB |
| 013.txt |
AC |
315 ms |
95764 KiB |
| 014.txt |
AC |
313 ms |
92388 KiB |
| 015.txt |
AC |
311 ms |
96044 KiB |
| 016.txt |
AC |
311 ms |
92080 KiB |
| 017.txt |
AC |
311 ms |
92284 KiB |
| 018.txt |
AC |
299 ms |
92396 KiB |
| 019.txt |
AC |
128 ms |
43916 KiB |
| 020.txt |
AC |
132 ms |
45928 KiB |
| 021.txt |
AC |
129 ms |
46228 KiB |
| 022.txt |
AC |
136 ms |
49336 KiB |
| 023.txt |
AC |
185 ms |
57556 KiB |
| 024.txt |
AC |
266 ms |
80792 KiB |
| 025.txt |
AC |
267 ms |
82464 KiB |
| 026.txt |
AC |
268 ms |
82796 KiB |
| 027.txt |
AC |
260 ms |
82088 KiB |
| 028.txt |
AC |
269 ms |
81716 KiB |
| 029.txt |
AC |
274 ms |
82004 KiB |
| 030.txt |
AC |
270 ms |
81824 KiB |
| 031.txt |
AC |
286 ms |
81428 KiB |
| 032.txt |
AC |
275 ms |
80316 KiB |
| 033.txt |
AC |
275 ms |
81904 KiB |
| 034.txt |
AC |
267 ms |
81188 KiB |
| 035.txt |
AC |
266 ms |
81008 KiB |
| 036.txt |
AC |
269 ms |
81540 KiB |
| example0.txt |
AC |
91 ms |
28432 KiB |
| example1.txt |
AC |
90 ms |
28500 KiB |
| example2.txt |
AC |
91 ms |
28400 KiB |