Small fixes
This commit is contained in:
parent
3d8961e703
commit
761a9128e7
|
@ -35,9 +35,9 @@ straightforward and concise.
|
|||
Programs should be written quickly,
|
||||
because there is not much time available.
|
||||
Unlike in traditional software engineering,
|
||||
the programs are short (usually at most some
|
||||
hundreds of lines) and it is not needed to
|
||||
maintain them after the contest.
|
||||
the programs are short (usually at most a few
|
||||
hundred lines of code), and they do not need to
|
||||
be maintained after the contest.
|
||||
|
||||
\section{Programming languages}
|
||||
|
||||
|
@ -56,7 +56,7 @@ Many people think that C++ is the best choice
|
|||
for a competitive programmer,
|
||||
and C++ is nearly always available in
|
||||
contest systems.
|
||||
The benefits in using C++ are that
|
||||
The benefits of using C++ are that
|
||||
it is a very efficient language and
|
||||
its standard library contains a
|
||||
large collection
|
||||
|
@ -154,7 +154,7 @@ This kind of code always works,
|
|||
assuming that there is at least one space
|
||||
or newline between each element in the input.
|
||||
For example, the above code can read
|
||||
both the following inputs:
|
||||
both of the following inputs:
|
||||
\begin{lstlisting}
|
||||
123 456 monkey
|
||||
\end{lstlisting}
|
||||
|
|
|
@ -14,7 +14,7 @@ The \key{time complexity} of an algorithm
|
|||
estimates how much time the algorithm will use
|
||||
for some input.
|
||||
The idea is to represent the efficiency
|
||||
as an function whose parameter is the size of the input.
|
||||
as a function whose parameter is the size of the input.
|
||||
By calculating the time complexity,
|
||||
we can find out whether the algorithm is fast enough
|
||||
without implementing it.
|
||||
|
|
|
@ -248,7 +248,7 @@ a solution can be constructed.
|
|||
|
||||
As an example, consider the problem of
|
||||
calculating the number
|
||||
of ways $n$ queens can be placed to
|
||||
of ways $n$ queens can be placed on
|
||||
an $n \times n$ chessboard so that
|
||||
no two queens attack each other.
|
||||
For example, when $n=4$,
|
||||
|
@ -276,10 +276,10 @@ there are two possible solutions:
|
|||
The problem can be solved using backtracking
|
||||
by placing queens to the board row by row.
|
||||
More precisely, exactly one queen will
|
||||
be placed to each row so that no queen attacks
|
||||
be placed on each row so that no queen attacks
|
||||
any of the queens placed before.
|
||||
A solution has been found when all
|
||||
$n$ queens have been placed to the board.
|
||||
$n$ queens have been placed on the board.
|
||||
|
||||
For example, when $n=4$,
|
||||
some partial solutions generated by
|
||||
|
@ -358,7 +358,7 @@ void search(int y) {
|
|||
\end{lstlisting}
|
||||
\end{samepage}
|
||||
The search begins by calling \texttt{search(0)}.
|
||||
The size of the board is $n$,
|
||||
The size of the board is $n \times n$,
|
||||
and the code calculates the number of solutions
|
||||
to \texttt{count}.
|
||||
|
||||
|
@ -366,7 +366,7 @@ The code assumes that the rows and columns
|
|||
of the board are numbered from 0 to $n-1$.
|
||||
When the function \texttt{search} is
|
||||
called with parameter $y$,
|
||||
it places a queen to row $y$
|
||||
it places a queen on row $y$
|
||||
and then calls itself with parameter $y+1$.
|
||||
Then, if $y=n$, a solution has been found
|
||||
and the variable \texttt{count} is increased by one.
|
||||
|
@ -446,11 +446,11 @@ the $4 \times 4$ board are numbered as follows:
|
|||
\end{center}
|
||||
|
||||
Let $q(n)$ denote the number of ways
|
||||
to place $n$ queens to an $n \times n$ chessboard.
|
||||
to place $n$ queens on an $n \times n$ chessboard.
|
||||
The above backtracking
|
||||
algorithm tells us that, for example, $q(8)=92$.
|
||||
When $n$ increases, the search quickly becomes slow,
|
||||
because the number of the solutions increases
|
||||
because the number of solutions increases
|
||||
exponentially.
|
||||
For example, calculating $q(16)=14772512$
|
||||
using the above algorithm already takes about a minute
|
||||
|
|
|
@ -333,8 +333,8 @@ the sets $x=\{1,3,4,8\}$ and $y=\{3,6,8,9\}$,
|
|||
and then constructs the set $z = x \cup y = \{1,3,4,6,8,9\}$:
|
||||
|
||||
\begin{lstlisting}
|
||||
int x = (1<<1)+(1<<3)+(1<<4)+(1<<8);
|
||||
int y = (1<<3)+(1<<6)+(1<<8)+(1<<9);
|
||||
int x = (1<<1)|(1<<3)|(1<<4)|(1<<8);
|
||||
int y = (1<<3)|(1<<6)|(1<<8)|(1<<9);
|
||||
int z = x|y;
|
||||
cout << __builtin_popcount(z) << "\n"; // 6
|
||||
\end{lstlisting}
|
||||
|
@ -804,7 +804,7 @@ that only elements $0 \ldots k$
|
|||
may be removed from $S$.
|
||||
For example,
|
||||
\[\texttt{partial}(\{0,2\},1)=\texttt{value}[\{2\}]+\texttt{value}[\{0,2\}],\]
|
||||
because we only may remove elements $0 \ldots 1$.
|
||||
because we may only remove elements $0 \ldots 1$.
|
||||
We can calculate values of \texttt{sum} using
|
||||
values of \texttt{partial}, because
|
||||
\[\texttt{sum}(S) = \texttt{partial}(S,n-1).\]
|
||||
|
|
|
@ -350,7 +350,7 @@ while (!q.empty()) {
|
|||
Using the graph traversal algorithms,
|
||||
we can check many properties of graphs.
|
||||
Usually, both depth-first search and
|
||||
bredth-first search may be used,
|
||||
breadth-first search may be used,
|
||||
but in practice, depth-first search
|
||||
is a better choice, because it is
|
||||
easier to implement.
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
\index{spanning tree}
|
||||
|
||||
A \key{spanning tree} of a graph consists of
|
||||
the nodes of the graph and some of the
|
||||
all nodes of the graph and some of the
|
||||
edges of the graph so that there is a path
|
||||
between any two nodes.
|
||||
Like trees in general, spanning trees are
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
The purpose of this book is to give you
|
||||
a thorough introduction to competitive programming.
|
||||
It is assumed that you already
|
||||
know the basics of programming, but previous
|
||||
background on competitive programming is not needed.
|
||||
know the basics of programming, but no previous
|
||||
background in competitive programming is needed.
|
||||
|
||||
The book is especially intended for
|
||||
students who want to learn algorithms and
|
||||
|
|
Loading…
Reference in New Issue