Submission #993034
Source Code Expand
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
//using System.Numerics; //comment out if AOJ
using System.Text;
using Problem = Tmp.Problem;
using MyIO;
#pragma warning disable //for AOJ
namespace Tmp
{
class Problem : IDisposable
{
bool IsGCJ;
int Repeat;
Scanner sc;
Printer pr;
public Problem(bool isGCJ, Scanner scanner, Printer printer)
{
sc = scanner;
pr = printer;
IsGCJ = isGCJ;
if (isGCJ) Repeat = sc.nextInt();
else Read();
}
public Problem(bool isGCJ) : this(isGCJ, new Scanner(), new Printer()) { }
public Problem(bool isGCJ, Scanner scanner) : this(isGCJ, scanner, new Printer()) { }
public Problem(bool isGCJ, Printer printer) : this(isGCJ, new Scanner(), printer) { }
public void Solve()
{
if (IsGCJ) for (var i = 0; i < Repeat; i++) { Read(); pr.Write("Case #" + (i + 1) + ": "); SolveOne(); }
else SolveOne();
}
public void Dispose()
{
sc.Dispose();
pr.Dispose();
}
public int Size { get { return 1; } }
public const long Mod = 1000000007;
// 使用する変数をここに書く
// string S;
// int a;
/// <summary>
/// 読み込み処理をここに書く
/// </summary>
void Read()
{
}
/// <summary>
/// メイン処理をここに書く
/// </summary>
void SolveOne()
{
int n = sc.nextInt();
int m = sc.nextInt();
int[] x = sc.nextInt(n);
int ans = 0;
int[] lsmod = new int[m];
int[] lsmodSame = new int[m];
HashMap<int, int> map = new HashMap<int, int>();
for (int i = 0; i < n; i++)
{
lsmod[x[i] % m]++;
map[x[i]]++;
}
foreach (var i in map)
{
if (i.Value > 1)
{
lsmodSame[i.Key % m] += (i.Value / 2);
}
}
for (int modA = 0; modA <= m/2; modA++)
{
int modB = (m - modA) % m;
int tmp;
if (modA == modB)
{
tmp = lsmod[modA] / 2;
}
else
{
tmp = Math.Min(lsmod[modA], lsmod[modB]);
if (lsmod[modA] > lsmod[modB])
{
tmp += Math.Min((lsmod[modA] - lsmod[modB]) / 2, lsmodSame[modA]);
}
else
{
tmp += Math.Min((lsmod[modB] - lsmod[modA]) / 2, lsmodSame[modB]);
}
}
ans += tmp;
}
Console.WriteLine(ans);
}
}
}
class Program
{
//public static RandomSFMT rand = new RandomSFMT();
public static bool IsJudgeMode = true;
public static bool IsGCJMode = false;
public static bool IsSolveCreated = true;
static void Main()
{
if (IsJudgeMode)
if (IsGCJMode) using (var problem = new Problem(true, new Scanner("C-large-practice.in.txt"), new Printer("output.txt"))) problem.Solve();
else using (var problem = new Problem(false, new Printer())) problem.Solve();
else
{
var num = 1;
int size = 0;
decimal time = 0;
for (var tmp = 0; tmp < num; tmp++)
{
using (var P = IsSolveCreated ? new Problem(false, new Scanner("input.txt"), new Printer()) : new Problem(false))
{
size = P.Size;
//time += Func.MeasureTime(() => P.Solve());
}
}
Console.WriteLine("{0}, {1}ms", size, time / num);
}
}
}
/// <summary>
/// カスタマイズしたIO
/// </summary>
namespace MyIO
{
class Printer : IDisposable
{
bool isConsole;
TextWriter file;
public Printer() { file = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false }; isConsole = true; }
public Printer(string path) { file = new StreamWriter(path, false) { AutoFlush = false }; isConsole = false; }
public void Write<T>(T value) { file.Write(value); }
public void Write(bool b) { file.Write(b ? "YES" : "NO"); }
public void Write(string str, params object[] args) { file.Write(str, args); }
public void WriteLine() { file.WriteLine(); }
public void WriteLine<T>(T value) { file.WriteLine(value); }
public void WriteLine(bool b) { file.WriteLine(b ? "YES" : "NO"); }
public void WriteLine<T>(IEnumerable<T> list) { foreach (var x in list) file.WriteLine(x); }
public void WriteLine<T>(List<T> list) { foreach (var x in list) file.WriteLine(x); }
public void WriteLine<T>(T[] list) { foreach (var x in list) file.WriteLine(x); }
public void WriteLine(string str, params object[] args) { file.WriteLine(str, args); }
public void Dispose() { file.Flush(); if (!isConsole) file.Dispose(); }
}
class Scanner : IDisposable
{
bool isConsole;
TextReader file;
public Scanner() { file = Console.In; }
public Scanner(string path) { file = new StreamReader(path); isConsole = false; }
public void Dispose() { if (!isConsole) file.Dispose(); }
#region next読み込み
string[] nextBuffer = new string[0];
int BufferCnt = 0;
char[] cs = new char[] { ' ' };
public string next()
{
while (BufferCnt >= nextBuffer.Length)
{
string st = file.ReadLine();
while (st == "") st = file.ReadLine();
nextBuffer = st.Split(cs, StringSplitOptions.RemoveEmptyEntries);
BufferCnt = 0;
}
return nextBuffer[BufferCnt++];
}
public int nextInt()
{
return int.Parse(next());
}
public long nextLong()
{
return long.Parse(next());
}
public double nextDouble()
{
return double.Parse(next());
}
private T[] enumerate<T>(int n, Func<T> f)
{
var a = new T[n];
for (int i = 0; i < n; ++i) a[i] = f();
return a;
}
public string[] next(int n) { return enumerate(n, next); }
public double[] nextDouble(int n) { return enumerate(n, nextDouble); }
public int[] nextInt(int n) { return enumerate(n, nextInt); }
public long[] nextLong(int n) { return enumerate(n, nextLong); }
#endregion
}
}
class HashMap<K, V> : Dictionary<K, V>
{
new public V this[K i]
{
get
{
V v;
return TryGetValue(i, out v) ? v : base[i] = default(V);
}
set { base[i] = value; }
}
}
Submission Info
Submission Time |
|
Task |
D - Pair Cards |
User |
yu3mars |
Language |
C# (Mono 4.6.2.0) |
Score |
700 |
Code Size |
7449 Byte |
Status |
AC |
Exec Time |
80 ms |
Memory |
15832 KB |
Judge Result
Set Name |
sample |
all |
Score / Max Score |
0 / 0 |
700 / 700 |
Status |
|
|
Set Name |
Test Cases |
sample |
sample-01.txt, sample-02.txt |
all |
sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt |
Case Name |
Status |
Exec Time |
Memory |
01-01.txt |
AC |
26 ms |
3288 KB |
01-02.txt |
AC |
74 ms |
12760 KB |
01-03.txt |
AC |
75 ms |
12760 KB |
01-04.txt |
AC |
75 ms |
12760 KB |
01-05.txt |
AC |
74 ms |
12760 KB |
01-06.txt |
AC |
75 ms |
12760 KB |
01-07.txt |
AC |
75 ms |
12760 KB |
01-08.txt |
AC |
75 ms |
12760 KB |
01-09.txt |
AC |
75 ms |
12760 KB |
01-10.txt |
AC |
76 ms |
13016 KB |
01-11.txt |
AC |
77 ms |
13528 KB |
01-12.txt |
AC |
66 ms |
10072 KB |
01-13.txt |
AC |
66 ms |
10456 KB |
01-14.txt |
AC |
77 ms |
15064 KB |
01-15.txt |
AC |
77 ms |
15064 KB |
01-16.txt |
AC |
77 ms |
15064 KB |
01-17.txt |
AC |
77 ms |
15064 KB |
01-18.txt |
AC |
77 ms |
15064 KB |
01-19.txt |
AC |
77 ms |
15192 KB |
01-20.txt |
AC |
80 ms |
15832 KB |
01-21.txt |
AC |
69 ms |
10200 KB |
01-22.txt |
AC |
68 ms |
10200 KB |
01-23.txt |
AC |
68 ms |
10200 KB |
01-24.txt |
AC |
68 ms |
10200 KB |
01-25.txt |
AC |
69 ms |
10456 KB |
01-26.txt |
AC |
70 ms |
10968 KB |
01-27.txt |
AC |
53 ms |
9816 KB |
01-28.txt |
AC |
29 ms |
4184 KB |
01-29.txt |
AC |
26 ms |
3416 KB |
01-30.txt |
AC |
27 ms |
3800 KB |
sample-01.txt |
AC |
25 ms |
3032 KB |
sample-02.txt |
AC |
25 ms |
2904 KB |