結果
| 問題 | No.2 素因数ゲーム |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-02-21 16:28:16 |
| 言語 | Crystal (1.19.1) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 5,000 ms |
| コード長 | 4,309 bytes |
| 記録 | |
| コンパイル時間 | 15,661 ms |
| コンパイル使用メモリ | 338,096 KB |
| 実行使用メモリ | 7,972 KB |
| 最終ジャッジ日時 | 2026-02-21 16:28:34 |
| 合計ジャッジ時間 | 16,983 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 31 |
ソースコード
macro pt(s);pointerof({{s}});end
struct Time;def diff(other : Time);(self-other).abs.total_milliseconds;end;end
struct Bool;def to_i;self ? 1 : 0;end;end
macro vgen(*v);Array.new({{v[0]}}){ {% if v.size==2 %}{{v[1]}}{% else %}vgen({{v[1..].splat}}){% end %} };end
macro rvgen(type,*v);{% if v.size==2 %}Array({{type}}).new({{v[0]}}){{{v[1]}}}{% else %}Array.new({{v[0]}}){rvgen({{type}},{{v[1..].splat}})}{% end %};end
def max(a,b);a<b ? b : a;end
def min(a,b);a<b ? a : b;end
def max(*a);x=a[0];(1...a.size).each{|i|x=max(x,a[i])};x;end
def min(*a);x=a[0];(1...a.size).each{|i|x=min(x,a[i])};x;end
macro chmin(a,b);(%t={{b}};{{a}}>%t ? ({{a}}=%t;true) : false);end
macro chmax(a,b);(%t={{b}};{{a}}<%t ? ({{a}}=%t;true) : false);end
macro swap(a,b);{{a}},{{b}}={{b}},{{a}};end
def assert(cond : Bool, msg = "Assertion failed");raise msg unless cond;end
macro for(f, m, s);begin
{{f}}
%f = true
loop do
if %f;%f = false;else;{{s}};end
break unless {{m}}
{{yield}}
end
end;end
class IOset
BUFS = 1 << 17
@@buf = Bytes.new BUFS;@@size = 0;@@idx = 0;@@eof = false;@@obuf = Bytes.new BUFS;@@oidx = 0;@@stk = StaticArray(UInt8, 20).new(0);@@precision = 8
def initialize;end
def self.fill;@@size = STDIN.read @@buf;@@idx = 0;@@eof = true if @@size == 0;end
def self.eof?;fill if @@size <= @@idx;@@size == 0;end
def self.read_byte : UInt8?;fill if @@idx >= @@size;return nil if @@size == 0;b = @@buf[@@idx];@@idx += 1;b;end
def self.trim;loop do;fill if @@idx >= @@size;return if @@size == 0;b = @@buf[@@idx];if b<=32;@@idx += 1;else return;end;end;end
def self.getc : Char;c = read_byte;return 0.chr if !c;while c && c <= 32;c = read_byte;end;c ? c.not_nil!.chr : 0.chr;end
def self.read_line : String;c = read_byte;return "" if !c;s = String.build do |i|;while c && c != 10;i.write_byte c;c = read_byte;end;end;s;end
def self.gets : String;c = read_byte;return "" if !c;while c && c <= 32;c = read_byte;return "" if !c;end;s = String.build do |i|;while c && c > 32;i.write_byte c;c = read_byte;end;end;s;end
macro geti_g(name, type)
def self.{{name}} : {{type}}
c = read_byte
while c && c <= 32
c = read_byte
end
sign = 1
if c == 45
sign = -1
c = read_byte
end
n : {{type}} = 0
while c && c >= 48 && c <= 57
n = n * 10 + (c ^ 48)
c = read_byte
end
n * sign
end
end
geti_g(geti, Int32);geti_g(geti64, Int64);geti_g(getu, UInt32);geti_g(getu64,UInt64)
# ---output---
def self.write_byte(b : UInt8);flush if @@oidx == BUFS;@@obuf[@@oidx] = b;@@oidx += 1;end
def self.write(s : String);s.each_byte { |b| write_byte b };end
def self.write_int(x : Int);i = 0;n = x < 0 ? -x : x;loop do;@@stk[i] = (n % 10).to_u8;i += 1;break if (n //= 10) <= 0;end;write_byte 45 if x < 0;while i > 0;write_byte @@stk[i-=1] | 48;end;end
def self.write_int(n : UInt8 | UInt16 | UInt32 | UInt64 | UInt128);i = 0;loop do;@@stk[i] = (n % 10).to_u8;i += 1;break if (n //= 10) <= 0;end;while i > 0;write_byte @@stk[i-=1] | 48;end;end
def self.setprecision(x);@@precision = x;end
def self.write_float(x : Float);v = x.to_i64;f = ((x - v).abs * 10i64 ** @@precision).round.to_i64;write_int v;write_byte 46;i = 0;loop do;@@stk[i] = (f % 10).to_u8;i += 1;break if (f //= 10) <= 0;end;(@@precision - i).times { write_byte 48};while i > 0;write_byte @@stk[i-=1] | 48;end;end
def self.flush;return if @@oidx == 0;STDOUT.write @@obuf[0, @@oidx];@@oidx = 0;end
def self.putv(x : Array(Array(T))) forall T
return if x.empty?
putv x[0]
(1...x.size).each { |i| write_byte 10;putv x[i] }
end
def self.putv(x)
case x
when Int then write_int x
when Char then write_byte x.ord.to_u8
when Float then write_float x
when String then write x
when Bool then write_byte x ? 49u8 : 48u8
else
return if x.empty?
putv x[0]
(1...x.size).each { |i| write_byte 32;putv x[i] }
end
end
def self.print(*x)
x.each { |v| putv v }
end
def self.outl(*x, sep = " ", endl = "\n")
if f=x.first?
putv f
(1...x.size).each { |i|write sep;putv x[i]}
end
write endl
end
end
macro ios;IOset;end
at_exit { ios.flush }
n = ios.geti
z = [] of Int32
2.upto(10000) do |i|
cnt = 0
while n % i == 0
cnt += 1
n //= i
end
z << cnt if cnt != 0
end
if n != 1
z << 1
end
sum = 0
z.each do |v|
sum ^= v
end
ios.outl sum == 0 ? "Bob" : "Alice"