algoparc - hawaii.edu

Post on 25-Dec-2021

9 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ICS 491: Competitve Programming – Lecture 1: Introduction

ICS 491: Competitive ProgrammingProf. Nodari Sitchinava

www.algoparc.ics.hawaii.edu

AlgoPARC

Lecture 1: Introduction

ICS 491: Competitve Programming – Lecture 1: Introduction

Competitive Programming?

Goal:

Learn to solve computational problems quickly and efficiently

ICS 491: Competitve Programming – Lecture 1: Introduction

Competitive Programming?

Goal:

Learn to solve computational problems quickly and efficiently

Improve problem solving skillsPrepare for ICPC programming competitionTechnical skill of a Computer Science major

Why bother?

ICPC website: https://icpc.baylor.edu

ICS 491: Competitve Programming – Lecture 1: Introduction

UH Manoa ICPC Performance

2015

2017

ICS 491: Competitve Programming – Lecture 1: Introduction

UH Manoa 2017 ICPC Performance

ICS 491: Competitve Programming – Lecture 1: Introduction

UH Manoa 2017 ICPC Performance

ICS 491: Competitve Programming – Lecture 1: Introduction

Course Info

Course Website:http://www2.hawaii.edu/~nodari/teaching/f18/

Instructor: Nodari SitchinavaEmail: nodari@hawaii.edu (Put “ICS 491” in the Subject)Office: POST 309COffice Hours: Wednesdays 3-4pm

TA: Branden OgataEmail: bsogata@hawaii.edu (Put “ICS 491” in the Subject)Office: POST 314-6Office Hours: Tuesday 2-3pm and Thursday 3-4pm

ICS 491: Competitve Programming – Lecture 1: Introduction

Course Info

ICS 491: Competitve Programming – Lecture 1: Introduction

Course Info

Prerequisites:‘B’ or better in ICS 311Fluency in Java, C or C++

ICS 491: Competitve Programming – Lecture 1: Introduction

Course Info

Prerequisites:‘B’ or better in ICS 311Fluency in Java, C or C++

Recommended Reading:Steven Halim and Felix Halim: Competitive Programming 3, 3rdEdition, Lulu Press, 2014. [CP3]Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest andClifford Stein, Introduction to Algorithms, 3rd Edition, The MITPress, 2009 [CLRS]

ICS 491: Competitve Programming – Lecture 1: Introduction

Course Info (cont.)

Grading:

70%: Weekly mini-contests (75 min)15%: Midterm contest (150 min)15%: Final contest (120 min)

ICS 491: Competitve Programming – Lecture 1: Introduction

Course Info (cont.)

Grading:

70%: Weekly mini-contests (75 min)15%: Midterm contest (150 min)15%: Final contest (120 min)

Cheating will result in an immediate F

ICS 491: Competitve Programming – Lecture 1: Introduction

Course Info (cont.)

Practice problems on UVa Online Judge:

Assigned weekly, but not gradedPreparation for weekly mini-contestsNeed an account on https://uva.onlinejudge.org

Grading:

70%: Weekly mini-contests (75 min)15%: Midterm contest (150 min)15%: Final contest (120 min)

Cheating will result in an immediate F

ICS 491: Competitve Programming – Lecture 1: Introduction

Programming Environment

OS: Ubuntu 16.04 with GNOME (on USB)Languages:

Java 8 (OpenJDK 1.8)C (gcc v5.4 with gnu11 extensions)C++ (g++ v5.4 with gnu++14 extensions)

2017-2018 ICPC environment without Python/Kotlin

Contests submissions:DOM Judge server (similar to UVa Online Judge)

JDK JavaDocsC++ STL docs

No internet access!

ICS 491: Competitve Programming – Lecture 1: Introduction

ICPC Regional Competition

On Saturday, November 3, 2018 in Laie, HIEligibility criteriahttps://icpc.baylor.edu/regionals/rules

If eligible and interestedTell me (via email) by the end of Sept 30, 2018

Potential team selection competition on

Saturday, Oct 20, 2018

ICS 491: Competitve Programming – Lecture 1: Introduction

Programming Environment

Boot from the provided USB:Insert USBPress power button

ICS 491: Competitve Programming – Lecture 1: Introduction

Programming Environment

Boot from the provided USB:Insert USBPress power button

username:password:

Your home directory will be wiped clean at each login

ICS 491: Competitve Programming – Lecture 1: Introduction

Programming Environment

Boot from the provided USB:Insert USBPress power button

username:password:

Open Firefox and visit https://judge.ics.hawaii.edu/domjudge/

Your home directory will be wiped clean at each login

Pick username wisely:Competition ranking by usernameWill be public information

ICS 491: Competitve Programming – Lecture 1: Introduction

Familiarize yourself with the environment

E.g.: write a program that prints ”Hello World!” and exits

Compile using one of the following:

C:gcc -g -O2 -std=gnu11 -static ${files} -lm

C++:g++ -g -O2 -std=gnu++14 -static ${files}Java:javac -encoding UTF-8 -sourcepath . -d . ${files}

And run/test your program

For Java, run it with:java -Dfile.encoding=UTF-8 -XX:+UseSerialGC -Xss64m

-Xms1920m -Xmx1920m ${file}

ICS 491: Competitve Programming – Lecture 1: Introduction

DomJudge Responses

Accepted (AC)

Presentation Error (PE)Wrong Answer (WA)Time Limit Exceeded (TLE)Memory Limit Exceeded (MLE)Runtime Error (RTE)

Good:

Bad:

ICS 491: Competitve Programming – Lecture 1: Introduction

Sample Contest – 45 min

Compiling:

C:gcc -g -O2 -std=gnu11 -static ${files} -lm

C++:g++ -g -O2 -std=gnu++14 -static ${files}Java:javac -encoding UTF-8 -sourcepath . -d . ${files}

java -Dfile.encoding=UTF-8 -XX:+UseSerialGC -Xss64m

-Xms1920m -Xmx1920m ${file}

Running Java:

ICS 491: Competitve Programming – Lecture 1: Introduction

Contest

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

O(K · N)

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

O(K · N)

Sort, report first K

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

O(K · N)

Sort, report first K

O(N log N + K )

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

O(K · N)

Sort, report first K

O(N log N + K )

Build a heap, extract min K times

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

O(K · N)

Sort, report first K

O(N log N + K )

Build a heap, extract min K times

O(N + K log N)

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

O(K · N)

Sort, report first K

O(N log N + K )

Build a heap, extract min K times

O(N + K log N)

Partition around K -th smallest element, sort first K elements

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

O(K · N)

Sort, report first K

O(N log N + K )

Build a heap, extract min K times

O(N + K log N)

Partition around K -th smallest element, sort first K elementsO(N + K log K )

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

O(K · N)

Sort, report first K

O(N log N + K )

Build a heap, extract min K times

O(N + K log N)

Partition around K -th smallest element, sort first K elements

Use algorithm::partial_sort(A, A+K, A+N)O(N + K log K )

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

O(K · N)

Sort, report first K

O(N log N + K )

Build a heap, extract min K times

O(N + K log N)

Partition around K -th smallest element, sort first K elements

Use algorithm::partial_sort(A, A+K, A+N)

O(N log K )

O(N + K log K )

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK

Solutions:

Scan K times, looking for smallest and removing it

O(K · N)

Sort, report first K

O(N log N + K )

Build a heap, extract min K times

O(N + K log N)

Partition around K -th smallest element, sort first K elements

Use algorithm::partial_sort(A, A+K, A+N)

O(N log K )

O(N + K log K )

Which one is better?

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK, N ≤ 1M, K ≤ 100

n Worst-case AC Algorithm≤ [10..11] O(n!), O(n6)≤ [15..18] O(2n · n2)≤ [18..22] O(2n · n)≤ 100 O(n4)≤ 400 O(n3)≤ 2K O(n2 log2 n)≤ 10K O(n2)≤ 1M O(n log2 n)

≤ 100M O(n)

Modern processors: ≈ 100M = 108 ops per second

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK, N ≤ 1M, K ≤ 100

n Worst-case AC Algorithm≤ [10..11] O(n!), O(n6)≤ [15..18] O(2n · n2)≤ [18..22] O(2n · n)≤ 100 O(n4)≤ 400 O(n3)≤ 2K O(n2 log2 n)≤ 10K O(n2)≤ 1M O(n log2 n)

≤ 100M O(n)

Modern processors: ≈ 100M = 108 ops per second

Use the simplest algorithm within the time budget

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem A: TopK, N ≤ 1M, K ≤ 100

n Worst-case AC Algorithm≤ [10..11] O(n!), O(n6)≤ [15..18] O(2n · n2)≤ [18..22] O(2n · n)≤ 100 O(n4)≤ 400 O(n3)≤ 2K O(n2 log2 n)≤ 10K O(n2)≤ 1M O(n log2 n)

≤ 100M O(n)

Modern processors: ≈ 100M = 108 ops per second

Use the simplest algorithm within the time budget

O(N log K ) ≈ 7M finishes within 1 second

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem B: Delayed Work

Understand the problem

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem B: Delayed Work

Understand the problem

cost(M) = (K/M) · P + X ·MFind M that minimizes cost(M)

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem B: Delayed Work

Understand the problem

cost(M) = (K/M) · P + X ·MFind M that minimizes cost(M)

Take a derivative and set to 0cost ′(M) = −K P/M2 + X = 0

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem B: Delayed Work

Understand the problem

cost(M) = (K/M) · P + X ·MFind M that minimizes cost(M)

Take a derivative and set to 0cost ′(M) = −K P/M2 + X = 0

Solve for M⇒ K P/M2 = X⇒ M =

√K P/X

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem B: Delayed Work

Understand the problem

cost(M) = (K/M) · P + X ·MFind M that minimizes cost(M)

Take a derivative and set to 0cost ′(M) = −K P/M2 + X = 0

Solve for M⇒ K P/M2 = X⇒ M =

√K P/X

Return cost(M) = K P√K P/X

+ X√

K P/X =√

K PX +√

XK P

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem B: Delayed Work

Understand the problem

cost(M) = (K/M) · P + X ·MFind M that minimizes cost(M)

Take a derivative and set to 0cost ′(M) = −K P/M2 + X = 0

Solve for M⇒ K P/M2 = X⇒ M =

√K P/X

Return cost(M) = K P√K P/X

+ X√

K P/X =√

K PX +√

XK P

WrongAnswer (WA)!

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem B: Delayed Work

Understand the problem

cost(M) = (K/M) · P + X ·MFind M that minimizes cost(M)

Take a derivative and set to 0cost ′(M) = −K P/M2 + X = 0

Solve for M⇒ K P/M2 = X⇒ M =

√K P/X

Return cost(M) = K P√K P/X

+ X√

K P/X =√

K PX +√

XK P

WrongAnswer (WA)!

M must be integer

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem B: Delayed Work

Understand the problem

cost(M) = (K/M) · P + X ·MFind M that minimizes cost(M)

Take a derivative and set to 0cost ′(M) = −K P/M2 + X = 0

Solve for M⇒ K P/M2 = X⇒ M =

√K P/X

Return min {cost(bMc), cost(dMe)}

= min{

K PbMc

+ XbMc, K PdMe

+ XdMe}

M must be integer

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem B: Delayed Work

Understand the problem

cost(M) = (K/M) · P + X ·MFind M that minimizes cost(M)

Take a derivative and set to 0cost ′(M) = −K P/M2 + X = 0

Solve for M⇒ K P/M2 = X⇒ M =

√K P/X

Return min {cost(bMc), cost(dMe)}

= min{

K PbMc

+ XbMc, K PdMe

+ XdMe}

Don’t forget to format the output

M must be integer

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem C: CardSorting

Card games are common in contestsThe problem is a simplest exerciseLearn to process strange inputsMap to integers and sort them

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem C: CardSorting

Card games are common in contestsThe problem is a simplest exerciseLearn to process strange inputsMap to integers and sort them

x = 13 · suit + (value − 2)

suit intSpades 0Hearts 1Diamonds 2Clubs 3

face value2-9 2-9T (10) 10J (Jack) 11Q (Queen) 12K (King) 13A (Ace) 14

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem D: OddPalindrom, |s| ≤ 100

Solution 1:

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem D: OddPalindrom, |s| ≤ 100

Solution 1:

Check every substring if it’s an even palindrom

Analysis

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem D: OddPalindrom, |s| ≤ 100

Solution 1:

Check every substring if it’s an even palindrom

O(|s|2) substringsO(|s|) time to check if a palindrom

O(|s|3) time

s3 = 1M ⇒ < 1second

Analysis

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem D: OddPalindrom, |s| ≤ 100

Solution 2:

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem D: OddPalindrom, |s| ≤ 100

Solution 2:

Claim: If the string is not odd, then it contains a 2-characterpalindrom

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem D: OddPalindrom, |s| ≤ 100

Solution 2:

Claim: If the string is not odd, then it contains a 2-characterpalindrom

Much simpler solution:Scan the string and check if there are two identicalcharacters next to each otherOutput ”Not odd.” the moment they are found

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem D: OddPalindrom, |s| ≤ 100

Solution 2:

Claim: If the string is not odd, then it contains a 2-characterpalindrom

Much simpler solution:Scan the string and check if there are two identicalcharacters next to each otherOutput ”Not odd.” the moment they are found

Much easier (and faster) to code

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem D: OddPalindrom, |s| ≤ 100

Solution 2:

Claim: If the string is not odd, then it contains a 2-characterpalindrom

Much simpler solution:Scan the string and check if there are two identicalcharacters next to each otherOutput ”Not odd.” the moment they are found

Analysis:

A single scan: O(|s|)

Much easier (and faster) to code

ICS 491: Competitve Programming – Lecture 1: Introduction

Problem types

Class will cover many common problem typesMost rely on ICS 311 algorithms/data structures for efficientimplementations

Used as subroutinesDon’t need proofsOften library implementations existMust know asymptotic runtimes

ICS 491: Competitve Programming – Lecture 1: Introduction

Lessons learned

Understand the problem firstThe first solution might be too tedious to implementUse paperDraw examples

Do a quick runtime analysisOnly start implementing if close to passing RTE

Test programDon’t rely on sample testcasesFind difficult testcases.Try large testcases

Master Programming Language(s)Don’t waste time reading documentation

Practice, practice, practice...

top related