Improve grammar and language style in chapter 1

This commit is contained in:
Roope Salmi 2017-02-22 03:07:36 +02:00
parent 71ad21d6fb
commit c168b30d94
1 changed files with 42 additions and 42 deletions

View File

@ -10,7 +10,7 @@ creatively are needed.
An algorithm for solving a problem An algorithm for solving a problem
has to be both correct and efficient, has to be both correct and efficient,
and the core of the problem is often and the core of the problem is often
how to invent an efficient algorithm. about inventing an efficient algorithm.
Theoretical knowledge of algorithms Theoretical knowledge of algorithms
is very important to competitive programmers. is very important to competitive programmers.
@ -27,12 +27,12 @@ In competitive programming, the solutions
are graded by testing an implemented algorithm are graded by testing an implemented algorithm
using a set of test cases. using a set of test cases.
Thus, it is not enough that the idea of the Thus, it is not enough that the idea of the
algorithm is correct, but the implementation has algorithm is correct, but the implementation also
also to be correct. has to be correct.
Good coding style in contests is A good coding style in contests is
straightforward and concise. straightforward and concise.
The programs should be written quickly, Programs should be written quickly,
because there is not much time available. because there is not much time available.
Unlike in traditional software engineering, Unlike in traditional software engineering,
the programs are short (usually at most some the programs are short (usually at most some
@ -44,7 +44,7 @@ maintain them after the contest.
\index{programming language} \index{programming language}
At the moment, the most popular programming At the moment, the most popular programming
languages in contests are C++, Python and Java. languages used in contests are C++, Python and Java.
For example, in Google Code Jam 2016, For example, in Google Code Jam 2016,
among the best 3,000 participants, among the best 3,000 participants,
73 \% used C++, 73 \% used C++,
@ -63,7 +63,7 @@ large collection
of data structures and algorithms. of data structures and algorithms.
On the other hand, it is good to On the other hand, it is good to
master several languages and know master several languages and understand
their strengths. their strengths.
For example, if large integers are needed For example, if large integers are needed
in the problem, in the problem,
@ -79,9 +79,9 @@ All example programs in this book are written in C++,
and the standard library's and the standard library's
data structures and algorithms are often used. data structures and algorithms are often used.
The programs follow the C++11 standard, The programs follow the C++11 standard,
that can be used in most contests nowadays. which can be used in most contests nowadays.
If you cannot program in C++ yet, If you cannot program in C++ yet,
now it is a good time to start learning. now is a good time to start learning.
\subsubsection{C++ template} \subsubsection{C++ template}
@ -104,14 +104,14 @@ that allows us to include the entire standard library.
Thus, it is not needed to separately include Thus, it is not needed to separately include
libraries such as \texttt{iostream}, libraries such as \texttt{iostream},
\texttt{vector} and \texttt{algorithm}, \texttt{vector} and \texttt{algorithm},
but they are available automatically. but rather they are available automatically.
The \texttt{using} line determines The \texttt{using} line declares
that the classes and functions that the classes and functions
of the standard library can be used directly of the standard library can be used directly
in the code. in the code.
Without the \texttt{using} line we should write, Without the \texttt{using} line we would have
for example, \texttt{std::cout}, to write, for example, \texttt{std::cout},
but now it suffices to write \texttt{cout}. but now it suffices to write \texttt{cout}.
The code can be compiled using the following command: The code can be compiled using the following command:
@ -202,7 +202,7 @@ printf("%d %d\n", a, b);
\end{lstlisting} \end{lstlisting}
Sometimes the program should read a whole line Sometimes the program should read a whole line
from the input, possibly with spaces. from the input, possibly containing spaces.
This can be accomplished by using the This can be accomplished by using the
\texttt{getline} function: \texttt{getline} function:
@ -242,12 +242,12 @@ After this, the program reads the input from the file
\subsubsection{Integers} \subsubsection{Integers}
The most used integer type in competitive programming The most used integer type in competitive programming
is \texttt{int}, that is a 32-bit type with is \texttt{int}, which is a 32-bit type with
value range $-2^{31} \ldots 2^{31}-1$ a value range of $-2^{31} \ldots 2^{31}-1$
or about $-2 \cdot 10^9 \ldots 2 \cdot 10^9$. or about $-2 \cdot 10^9 \ldots 2 \cdot 10^9$.
If the type \texttt{int} is not enough, If the type \texttt{int} is not enough,
the 64-bit type \texttt{long long} can be used, the 64-bit type \texttt{long long} can be used.
with value range $-2^{63} \ldots 2^{63}-1$ It has a value range of $-2^{63} \ldots 2^{63}-1$
or about $-9 \cdot 10^{18} \ldots 9 \cdot 10^{18}$. or about $-9 \cdot 10^{18} \ldots 9 \cdot 10^{18}$.
The following code defines a The following code defines a
@ -258,7 +258,7 @@ long long x = 123456789123456789LL;
The suffix \texttt{LL} means that the The suffix \texttt{LL} means that the
type of the number is \texttt{long long}. type of the number is \texttt{long long}.
A common error when using the type \texttt{long long} A common mistake when using the type \texttt{long long}
is that the type \texttt{int} is still used somewhere is that the type \texttt{int} is still used somewhere
in the code. in the code.
For example, the following code contains For example, the following code contains
@ -284,8 +284,8 @@ Usually contest problems are set so that the
type \texttt{long long} is enough. type \texttt{long long} is enough.
Still, it is good to know that Still, it is good to know that
the \texttt{g++} compiler also provides the \texttt{g++} compiler also provides
an 128-bit type \texttt{\_\_int128\_t} a 128-bit type \texttt{\_\_int128\_t}
with value range with a value range of
$-2^{127} \ldots 2^{127}-1$ or $-10^{38} \ldots 10^{38}$. $-2^{127} \ldots 2^{127}-1$ or $-10^{38} \ldots 10^{38}$.
However, this type is not available in all contest systems. However, this type is not available in all contest systems.
@ -305,7 +305,7 @@ output it ''modulo $m$'', i.e.,
the remainder when the answer is divided by $m$ the remainder when the answer is divided by $m$
(for example, ''modulo $10^9+7$''). (for example, ''modulo $10^9+7$'').
The idea is that even if the actual answer The idea is that even if the actual answer
may be very large, is very large,
it suffices to use the types it suffices to use the types
\texttt{int} and \texttt{long long}. \texttt{int} and \texttt{long long}.
@ -334,7 +334,7 @@ for (int i = 2; i <= n i++) {
cout << x << "\n"; cout << x << "\n";
\end{lstlisting} \end{lstlisting}
Usually the remainder should be always Usually the remainder should always
be between $0\ldots m-1$. be between $0\ldots m-1$.
However, in C++ and other languages, However, in C++ and other languages,
the remainder of a negative number the remainder of a negative number
@ -379,7 +379,7 @@ printf("%.9f\n", x);
A difficulty when using floating point numbers A difficulty when using floating point numbers
is that some numbers cannot be represented is that some numbers cannot be represented
accurately as floating point numbers, accurately as floating point numbers,
but there will be rounding errors. and there will be rounding errors.
For example, the result of the following code For example, the result of the following code
is surprising: is surprising:
@ -394,12 +394,12 @@ while the correct value would be 1.
It is risky to compare floating point numbers It is risky to compare floating point numbers
with the \texttt{==} operator, with the \texttt{==} operator,
because it is possible that the values should because it is possible that the values should be
be equal but they are not because of rounding. equal but they are not because of precision errors.
A better way to compare floating point numbers A better way to compare floating point numbers
is to assume that two numbers are equal is to assume that two numbers are equal
if the difference between them is $\varepsilon$, if the difference between them is less than
where $\varepsilon$ is a small number. $\varepsilon$, where $\varepsilon$ is a small number.
In practice, the numbers can be compared In practice, the numbers can be compared
as follows ($\varepsilon=10^{-9}$): as follows ($\varepsilon=10^{-9}$):
@ -411,7 +411,7 @@ if (abs(a-b) < 1e-9) {
\end{lstlisting} \end{lstlisting}
Note that while floating point numbers are inaccurate, Note that while floating point numbers are inaccurate,
integers up to a certain limit can be still integers up to a certain limit can still be
represented accurately. represented accurately.
For example, using \texttt{double}, For example, using \texttt{double},
it is possible to accurately represent all it is possible to accurately represent all
@ -461,12 +461,12 @@ typedef pair<int,int> pi;
\subsubsection{Macros} \subsubsection{Macros}
\index{macro} \index{macro}
Another way to shorten the code is to define Another way to shorten code is to define
\key{macros}. \key{macros}.
A macro means that certain strings in A macro means that certain strings in
the code will be changed before the compilation. the code will be changed before the compilation.
In C++, macros are defined using the In C++, macros are defined using the
command \texttt{\#define}. \texttt{\#define} keyword.
For example, we can define the following macros: For example, we can define the following macros:
\begin{lstlisting} \begin{lstlisting}
@ -634,7 +634,7 @@ then $A \cup B = \{2,3,7,8\}$.
\item The \key{complement} $\bar A$ consists of elements \item The \key{complement} $\bar A$ consists of elements
that are not in $A$. that are not in $A$.
The interpretation of a complement depends on The interpretation of a complement depends on
the \key{universal set} that contains all possible elements. the \key{universal set}, which contains all possible elements.
For example, if $A=\{1,2,5,7\}$ and the universal set is For example, if $A=\{1,2,5,7\}$ and the universal set is
$\{1,2,\ldots,10\}$, then $\bar A = \{3,4,6,8,9,10\}$. $\{1,2,\ldots,10\}$, then $\bar A = \{3,4,6,8,9,10\}$.
\item The \key{difference} $A \setminus B = A \cap \bar B$ \item The \key{difference} $A \setminus B = A \cap \bar B$
@ -656,7 +656,7 @@ $\emptyset$,
$\{2\}$, $\{4\}$, $\{7\}$, $\{2,4\}$, $\{2,7\}$, $\{4,7\}$ and $\{2,4,7\}$. $\{2\}$, $\{4\}$, $\{7\}$, $\{2,4\}$, $\{2,7\}$, $\{4,7\}$ and $\{2,4,7\}$.
\end{center} \end{center}
Often used sets are Some often used sets are
$\mathbb{N}$ (natural numbers), $\mathbb{N}$ (natural numbers),
$\mathbb{Z}$ (integers), $\mathbb{Z}$ (integers),
$\mathbb{Q}$ (rational numbers) and $\mathbb{Q}$ (rational numbers) and
@ -693,7 +693,7 @@ $\land$ (\key{conjunction}),
$\lor$ (\key{disjunction}), $\lor$ (\key{disjunction}),
$\Rightarrow$ (\key{implication}) and $\Rightarrow$ (\key{implication}) and
$\Leftrightarrow$ (\key{equivalence}). $\Leftrightarrow$ (\key{equivalence}).
The following table shows the meaning of these operators: The following table shows the meanings of these operators:
\begin{center} \begin{center}
\begin{tabular}{rr|rrrrrrr} \begin{tabular}{rr|rrrrrrr}
@ -847,7 +847,7 @@ $\lfloor \log_2(123)+1 \rfloor = 7$.
\subsubsection{IOI} \subsubsection{IOI}
The International Olympiad in Informatics (IOI) \cite{ioi} The International Olympiad in Informatics (IOI) \cite{ioi}
is an annual programming contests for is an annual programming contest for
secondary school students. secondary school students.
Each country is allowed to send a team of Each country is allowed to send a team of
four students to the contest. four students to the contest.
@ -864,9 +864,9 @@ they compete as individuals.
The IOI syllabus \cite{ioiy} regulates the topics The IOI syllabus \cite{ioiy} regulates the topics
that may appear in IOI tasks. that may appear in IOI tasks.
This book covers almost all topics in the IOI syllabus. This book covers almost all the topics in the IOI syllabus.
The participants for the IOI are selected through Participants for the IOI are selected through
national contests. national contests.
Before the IOI, many regional contests are organized, Before the IOI, many regional contests are organized,
such as the Baltic Olympiad in Informatics (BOI), such as the Baltic Olympiad in Informatics (BOI),
@ -896,11 +896,11 @@ in the contest, there are only 128 final slots available,
so even advancing to the finals so even advancing to the finals
is a great achievement in some regions. is a great achievement in some regions.
In each ICPC contest, the teams have five hours time to solve In each ICPC contest, the teams have five hours of time to
about ten algorithm problems. solve about ten algorithm problems.
A solution to a problem is accepted only if it solves A solution to a problem is accepted only if it solves
all test cases efficiently. all test cases efficiently.
During the contest, the teams see the results of the other teams, During the contest, competitors may view the results of other teams,
but for the last hour the scoreboard is frozen and it but for the last hour the scoreboard is frozen and it
is not possible to see the results of the last submissions. is not possible to see the results of the last submissions.
@ -912,8 +912,8 @@ at the ICPC, especially more mathematical skills.
\subsubsection{Online contests} \subsubsection{Online contests}
There are also many online contests that are open for everybody. There are also many online contests that are open for everybody.
At the moment, the most active contest site is Codeforces At the moment, the most active contest site is Codeforces,
that organizes contests about weekly. which organizes contests about weekly.
In Codeforces, participants are divided into two divisions: In Codeforces, participants are divided into two divisions:
beginners compete in Div2 and more experienced programmers in Div1. beginners compete in Div2 and more experienced programmers in Div1.
Other contest sites include AtCoder, CS Academy, HackerRank and Topcoder. Other contest sites include AtCoder, CS Academy, HackerRank and Topcoder.