今まではAC==Sランクだったが、今回はBランクらしい。
問題としてもあまり楽しめなかった。
この記事も、あくまで言語ごとの性能評価という扱い。
ミッション1・2は省略して、ミッション3のタイム。
Erlang/COBOLは省略。
で、C/C++/ObjC/D/C#/VB/JavaでIOゲー実施。今回IOゲーの有無で如実に時間に差が出た。静的型付け言語が大きく有利になってしまうため、性能評価としては宜しくない。
とりあえずQiitaにはIOゲーしたものを掲載。あとはgithub参照。
C
paizapoh4.c
#include <stdio.h>
char z[9999999];
int get(){
static int input_count=0;
int r=0;
for(;'0'<=z[input_count]&&z[input_count]<='9';)r=r*10+z[input_count++]-'0';
input_count++;
return r;
}
int a[300000];
int main(){
fread(z,1,sizeof(z),stdin);
int T,N,i,cur=0;
//scanf("%d%d",&T,&N);
T=get();N=get();
for(i=0;i<T;i++)a[i]=get(),cur+=a[i];
int r=cur;
for(;i<N;i++){
a[i]=get();
cur+=a[i];
cur-=a[i-T];
if(r<cur)r=cur;
}
printf("%d\n",r);
return 0;
}
D
paizapoh4.d
#!/usr/bin/rdmd
import std.stdio;
char z[9999999];
int get(){
static int input_count=0;
int r=0;
for(;'0'<=z[input_count]&&z[input_count]<='9';)r=r*10+z[input_count++]-'0';
input_count++;
return r;
}
int main(){
stdin.rawRead(z);
int T,N,i,cur=0;
T=get();N=get();
int[] a=new int[N];
for(i=0;i<T;i++)a[i]=get(),cur+=a[i];
int r=cur;
for(;i<N;i++){
a[i]=get();
cur+=a[i];
cur-=a[i-T];
if(r<cur)r=cur;
}
printf("%d\n",r);
return 0;
}
C#
paizapoh4.cs
using System;
using System.Linq;
class PaizaPOH4{
const int SIZE=9999999;
static byte[] z=new byte[SIZE];
static int input_count=0;
static int get(){
int r=0;
for(;'0'<=z[input_count]&&z[input_count]<='9';)r=r*10+z[input_count++]-'0';
input_count++;
return r;
}
static void Main(){
Console.OpenStandardInput().Read(z,0,SIZE);
int T,N,i,cur=0;
T=get();N=get();
int[] a=new int[N];
for(i=0;i<T;i++){a[i]=get();cur+=a[i];}
int r=cur;
for(;i<N;i++){
a[i]=get();
cur+=a[i];
cur-=a[i-T];
if(r<cur)r=cur;
}
Console.WriteLine(r);
}
}
VB
paizapoh4.vb
module PaizaPOH4
dim SIZE as integer=9999999
dim z(SIZE-1) as byte
dim input_count as integer=0
function myget() as integer
dim r as integer
while 48<=z(input_count) andalso z(input_count)<=57
r=r*10+z(input_count)-48
input_count+=1
end while
input_count+=1
return r
end function
sub Main()
Console.OpenStandardInput().Read(z,0,SIZE)
dim T as integer=myget()
dim N as integer=myget()
dim cur as integer=0
dim a(N-1) as integer
for i as integer=0 to T-1
a(i)=myget()
cur+=a(i)
next
dim r as integer=cur
for i as integer=T to N-1
a(i)=myget()
cur+=a(i)
cur-=a(i-T)
if r<cur
r=cur
end if
next
Console.WriteLine(r)
end sub
end module
Java
paizapoh4.java
//import java.util.*;
class Main{
static final int SIZE=9999999;
static byte[] z=new byte[SIZE];
static int input_count=0;
static int get(){
int r=0;
for(;'0'<=z[input_count]&&z[input_count]<='9';)r=r*10+z[input_count++]-'0';
input_count++;
return r;
}
public static void main(String[]args){try{
System.in.read(z,0,SIZE);
int T,N,i,cur=0;
T=get();N=get();
int[] a=new int[N];
for(i=0;i<T;i++){a[i]=get();cur+=a[i];}
int r=cur;
for(;i<N;i++){
a[i]=get();
cur+=a[i];
cur-=a[i-T];
if(r<cur)r=cur;
}
System.out.println(r);
}catch(java.io.IOException e){}}
}