結果
| 問題 | No.630 門松グラフ |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-02-26 18:48:19 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 85 ms / 1,500 ms |
| コード長 | 2,965 bytes |
| 記録 | |
| コンパイル時間 | 882 ms |
| コンパイル使用メモリ | 107,240 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-22 05:35:10 |
| 合計ジャッジ時間 | 2,963 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 32 |
コンパイルメッセージ
Main.d(108): Deprecation: function `Main.IO!(makeGlobal, makeGlobal).IO.put!("{exit: true}", string).put.putMain!(c, string).putMain` function requires a dual-context, which is deprecated
Main.d-mixin-78(78): instantiated from here: `putMain!(c, string)`
Main.d(12): instantiated from here: `put!("{exit: true}", string)`
Main.d(108): Deprecation: function `Main.IO!(makeGlobal, makeGlobal).IO.put!("{}", string).put.putMain!(c, string).putMain` function requires a dual-context, which is deprecated
Main.d-mixin-78(78): instantiated from here: `putMain!(c, string)`
Main.d(14): instantiated from here: `put!("{}", string)`
Main.d(108): Deprecation: function `Main.IO!(makeGlobal, makeGlobal).IO.put!("{}", Result).put.putMain!(c, Result).putMain` function requires a dual-context, which is deprecated
Main.d-mixin-78(78): instantiated from here: `putMain!(c, Result)`
Main.d(15): instantiated from here: `put!("{}", Result)`
Main.d(108): Deprecation: function `Main.IO!(makeGlobal, makeGlobal).IO.put!("{}", int, int).put.putMain!(c, int, int).putMain` function requires a dual-context, which is deprecated
Main.d-mixin-78(78): instantiated from here: `putMain!(c, int, int)`
Main.d(18): instantiated from here: `put!("{}", int, int)`
ソースコード
// URL: https://yukicoder.me/problems/no/630
import std.algorithm, std.array, std.bitmanip, std.container, std.conv, std.format,
std.functional, std.math, std.range, std.traits, std.typecons, std.stdio, std.string;
version(unittest) {} else
void main()
{
int N, M; io.getV(N, M);
auto k = N/2;
if (M < N-1 || M > k*(N-k)) io.put!"{exit: true}"("NO");
io.put("YES");
io.put(iota(1, N+1));
foreach (i; 0..k) {
io.put(i+1, k+i+1);
if (k+i+1 < N) io.put(i+1, k+i+2);
}
auto c = N-1;
foreach (i; 0..k)
foreach (j; k..N) {
if (c == M) return;
if (i+k == j || i+k+1 == j) continue;
io.put(i+1, j+1);
++c;
}
}
auto io = IO!()();
import std.stdio;
struct IO(alias IN = stdin, alias OUT = stdout)
{
import std.meta : allSatisfy;
import core.stdc.stdlib : exit;
void getV(T...)(ref T v)
{
foreach (ref w; v) get(w);
}
void getA(T)(size_t n, ref T v)
if (hasAssignableElements!T)
{
v = new T(n);
foreach (ref w; v) get(w);
}
void getC(T...)(size_t n, ref T v)
if (allSatisfy!(hasAssignableElements, T))
{
foreach (ref w; v) w = new typeof(w)(n);
foreach (i; 0..n) foreach (ref w; v) get(w[i]);
}
void getM(T)(size_t r, size_t c, ref T v)
if (hasAssignableElements!T && hasAssignableElements!(ElementType!T))
{
v = new T(r);
foreach (ref w; v) getA(c, w);
}
template getS(E...)
{
void getS(T)(size_t n, ref T v)
{
v = new T(n);
foreach (ref w; v) foreach (e; E) mixin("get(w."~e~");");
}
}
const struct PutConf
{
bool newline = true, flush, exit;
string floatFormat = "%.10f", delimiter = " ";
}
void put(alias conf = "{}", T...)(T v)
{
mixin("const PutConf c = "~conf~"; putMain!c(v);");
}
void putB(alias conf = "{}", S, T)(bool c, S t, T f)
{
if (c) put!conf(t);
else put!conf(f);
}
void putRaw(T...)(T v)
{
OUT.write(v);
OUT.writeln;
}
private
{
dchar[] buf;
auto sp = (new dchar[](0)).splitter;
void nextLine()
{
IN.readln(buf);
sp = buf.splitter;
}
void get(T)(ref T v)
{
if (sp.empty) nextLine();
v = sp.front.to!T;
sp.popFront();
}
void putMain(PutConf c, T...)(T v)
{
foreach (i, w; v) {
putOne!c(w);
if (i+1 < v.length) OUT.write(c.delimiter);
}
static if (c.newline) OUT.writeln;
static if (c.flush) OUT.flush();
static if (c.exit) exit(0);
}
void putOne(PutConf c, T)(T v)
{
static if (isInputRange!T && !isSomeString!T) putRange!c(v);
else static if (isFloatingPoint!T) OUT.write(format(c.floatFormat, v));
else static if (hasMember!(T, "fprint")) v.fprint(OUT);
else OUT.write(v);
}
void putRange(PutConf c, T)(T v)
{
auto w = v;
while (!w.empty) {
putOne!c(w.front); w.popFront();
if (!w.empty) OUT.write(c.delimiter);
}
}
}
}