• 이 대회는 2018년도 고려대학교 프로그래밍 경시대회입니다.
  • 이 대회는 Startlink, sooho, Wishket, NAVER D2, VCNC, 삼성 소프트웨어 멤버십, 고려대학교 정보대학 SW중심대학, 정보보호학부·정보보호대학원의 후원으로 진행됩니다.
  • 이 대회는 한국 시간 (GMT +9) 2018년 12월 8일 14시 00분 부터 18시 00분 까지 진행됩니다.
  • 이 대회는 개인으로만 참여가 가능합니다.
  • 대회 도중 문제 제출과 언어별 레퍼런스 사이트 접근을 제외한 네트워크 사용은 금지됩니다. 사용 가능한 레퍼런스 사이트의 예시는 다음과 같습니다.

  • 대회 전에 작성한 코드나 출력물의 사용은 금지합니다.

  • 대회는 총 8개의 문제로 구성되어 있습니다.

  • 모든 문제는 C++17을 이용하여 시간 제한과 메모리 제한 안에 풀 수 있음이 보장되어 있습니다.

  • 일부 문제는 서브태스크가 존재합니다. 서브태스크란 각각에 대해 배점이 붙은 부분문제를 의미합니다.

  • 각 서브태스크에는 추가적인 제한 조건이 붙을 수 있으며, 이 때는 문제 전체의 제한 조건과 함께 동시에 적용됩니다.

  • 서브태스크의 채점은 서브태스크의 조건을 만족하는 한 개 이상의 준비된 입력에 대해서, 모든 올바른 결과를 출력해야 정답으로 인정합니다.

  • 문제에는 시간 제한과 메모리 제한이 있습니다. 이 제한은 하나의 데이터에 대해 프로그램이 주어진 시간 제한 이하의 시간과, 메모리 제한 이내의 메모리를 사용하여 동작하여야 한다는 것을 의미합니다. 메모리 제한은 스택 메모리, 힙 메모리 등을 모두 포함합니다.

  • 언어별 메모리 제한과 시간 제한 보정은 다음과 같습니다.

    • Python 2 / Python 3 : 시간제한 ×3+2초, 메모리 제한 ×2+32MB
    • Java / Kotlin : 시간제한 ×2+1초, 메모리제한 ×2+16MB
    • Rust : 메모리제한 +16MB
  • 문제의 시간 제한과 메모리 제한은 문제마다 상이할 수 있습니다.

  • 각 참가자의 순위는 다음과 같이 결정됩니다.

    • 시간 패널티 = (대회 시작 후 마지막으로 점수를 증가시킨 제출까지의 시간)
    • 추가 페널티 = (점수를 얻은 문제에 대해서 각각 '컴파일 에러, 부분 정답, 전체 정답을 제외한 제출 횟수' + '해당 문제 획득 점수 증가 횟수' - 1) * 20분
    • 순위 = (점수 총합이 더 높은 사람 수) + (점수 총합이 같으며 시간 패널티와 추가 패널티의 합이 더 적은 사람 수) + 1
  • 일부 문제는 부호 있는 32비트 정수형으로 표현하기에는 너무 큰 값에 대한 입출력 및 연산을 요구할 때가 있습니다. 각 언어별로 부호 있는/없는 64비트 정수형을 입출력 받는 방법은 다음과 같습니다.

C :

#include <stdio.h>
int main() {
 long long int a; // 부호 있는 64비트 정수
 unsigned long long int b; // 부호 없는 64비트 정수

 scanf("%lld", &a);
 printf("%lld", a);

 scanf("%llu", &b);
 printf("%llu", b);
 return 0;
}

C++ :

#include <iostream>
int main() {
 long long int a; // 부호 있는 64비트 정수
 unsigned long long int b; // 부호 없는 64비트 정수

 std::cin >> a;
 std::cout << a << std::endl;

 std::cin >> b;
 std::cout << b << std::endl;
 return 0;
}

Java :

import java.util.*;
public class Main{
 public static void main(String args[]){
   Scanner sc = new Scanner(System.in);

   long a = sc.nextLong(); // 부호 있는 64비트 정수
   System.out.println(a);

   String s = sc.next();
   long b = Long.parseUnsignedLong(s); // Java는 공식적으로 부호 없는 64비트는 제공하지 않습니다
   System.out.println(Long.toUnsignedString(b)); // 다만 이런 식으로 출력을 할 수는 있습니다
 }
}

Python 2 :

a = long(raw_input()) // 부호 있는 정수형
print a

Python 3 :

a = int(input()) // 부호 있는 정수형
print(a)

Kotlin (JVM) :

import java.util.*
fun main(args:Array<String>) {
 val sc = Scanner(System.`in`)
 val a = sc.nextLong() // 부호 있는 64비트 정수
 println(a)
 val s = sc.next()
 val b = java.lang.Long.parseUnsignedLong(s) // Kotlin는 공식적으로 부호 없는 64비트는 제공하지 않습니다 (1.3에 Experimental로 추가되긴 했습니다)
 println(java.lang.Long.toUnsignedString(b)) // 다만 이런 식으로 출력을 할 수는 있습니다
}

Rust :

use std::io;
fn main() {
 let mut s = String::new();

 io::stdin().read_line(&mut s).unwrap();

 let values:Vec<i64> = s // 부호 있는 64비트 정수
   .as_mut_str()
   .split_whitespace()
   .map(|s| s.parse().unwrap())
   .collect();

 println!("{}", values[0]);
 s.clear();

 io::stdin().read_line(&mut s).unwrap();

 let values:Vec<u64> = s // 부호 없는 64비트 정수
   .as_mut_str()
   .split_whitespace()
   .map(|s| s.parse().unwrap())
   .collect();

 println!("{}", values[0]);
}