The course staff must critically examine close to ten thousand
pages of homework submissions this semester! We desperately need your help
to make sure homeworks are graded and returned quickly. If you have any
questions or concerns about these policies, please don't hesitate to ask in
lecture, during office hours, or on Ed.
Homework Logistics: How to Submit
 All written homework solutions must be submitted electronically via
Gradescope.
Please enroll yourself on Gradescope (entry code: NPNDP5).
Submit one PDF file for each numbered homework
problem. Gradescope will not accept other file formats such as plain
text, HTML, LaTeX source, or Microsoft Word (.doc or .docx).
 You can register with Gradescope using any name and email address
you like. If you are using an alias or a nonuniversity email address
on Gradescope, please
fill in this form to tell us who you are
so we can give you credit for your homework (there is no need to fill the form if you are using
your real name and university email address).
 Homework solutions may be submitted by groups of at most
three students. We strongly encourage (but will not
require) every student to work in a group with at least one other
student. Students are responsible for forming their own homework
groups. Groups may be different for each numbered homework
problem.
 For group solutions, exactly one member
of each group submits the solution to each problem. Even
if the groups are identical, the submitter may be
different for each numbered homework problem.
 Whoever submits any group solution must also submit the
names of the other group members via Gradescope. Gradescope will
then automatically apply the grade for that submission to all
group members. If this information is not entered correctly, the
other group members' grades will be delayed or possibly
lost entirely.
 If you discover that your name was omitted from a group
homework submission, please submit a regrade request.
 As error correction, each submitted homework solution should
include the following information at the top
of the first page:
 Your Gradescope name
 Your Gradescope email address
 The problem number (of the form "X.Y")
For group solutions, include the Gradescope name and email address of every group
member. If you are typesetting your solutions with LaTeX, we recommend that you use
our HW solution template (see pdf).
 We will not accept late GPSs on PrairieLearn for any reason.
 For written homeworks, we will accept late homework only up to 24 hours after the deadline (i.e., by the corresponding Friday at 10:00am),
but late homework will receive a 40% penalty. (For example, if your score for the homework problem is 100%,
your adjusted score is 60%; if your score for the homework problem is 50%, your adjusted score is 30%.) Homework not received within 24 hours will receive a zero grade. In determining lateness, we will use the time of your last
submission on Gradescope (as always, we will grade only your last submitted version).
 To offset this rather draconian policy, we allow
some number of homework scores to be dropped; see the
grading policy.

In truly extenuating circumstances, such as documented illness injury, or other emergency,
we may either allow you to submit your homework up to 24 hours late without penalty, or we
may forgive your coursework. In the latter case, we will compute your final course
grade as if your forgiven work simply do not exist; your other work
will have more weight. However, you will need to obtain approval in advance from Timothy.
Please make it easy for the graders to figure out what you mean in the
short time they have to grade your solution. If your solutions are difficult to
read or understand, you will lose points.
Be Honest
 Write everything in your own words, and properly
cite every outside source you use. We strongly encourge
you to use any outside source at your disposal, provided you use your
sources properly and give them proper credit. If you get an idea from an
outside source, citing that source will not lower your grade. Failing to
properly cite an outside source—thereby taking credit for ideas that are not
your own—is plagiarism.
The only sources that you are not required to cite
are the official course materials (lectures, lecture notes, homework and exam
solutions from this semester) and sources for prerequisite material
(which we assume you already know by heart).
 List everyone you worked with on each homework problem.
Again, we strongly encourage you to work together, but you must give everyone
proper credit. If you work in a group of 20 students, then all 20 names
should appear on your homework solution. If someone was particularly helpful,
describe their contribution. Be generous; if you're not sure whether someone
should be included in your list of collaborators, include them. For
discussions in class, in section, or in office hours, where collecting names
is impractical, it's okay to write something like "discussions in class".
 Please see our
academic integrity policy for more details.
Be Clear
 Write legibly. If we can't read your solution, we can't give
you credit for it. If you have sloppy handwriting, use LaTeX.
Please don't submit your first draft. Writing legibly also helps you
think more clearly.
 We strongly recommend typesetting your homework
using LaTeX. (In
particular, we recommend TeXShop
for Mac OS X, TeX Live for Linux
(already included in most distributions), and MiKTeX
for Windows.) We provide a LaTeX template for homework solutions.
 You are welcome to submit scans of handwritten homework
solutions, but please write clearly using a black pen on plain white unlined
paper, and please use a highquality scanning
app (or an actual highquality scanner). We recommend
printing your scanned document to check for readability before
submitting.
 Write sensibly. You will lose points for poor spelling,
grammar, punctuation, arithmetic, algebra, logic, and so on. This rule is
especially important for students whose first language is not
English. Writing sensibly also helps you think sensibly.
 Write carefully. We can only grade what you actually
write, not what you mean. We will not attempt to read your mind. If your
answer is ambiguous, the graders are explicitly isntructed to choose an
interpretation that makes it wrong. Writing carefully also helps you
think carefully.
 Avoid "deadly sins":
 Write complete solutions, not just examples. Don't describe
algorithms by showing the first two or three iterations and then writing
"and so on". Similarly, don't try to prove something by demonstrating it
for a few small examples and then writing "do the same thing for all n".
Any solution that includes phrases like "and so on", "etc.", "do this for
all n", or "repeat this process" may get a score of
zero. Those phrases indicate precisely where you should have
used iteration, recursion, or induction but didn't.
 Declare all your variables. Whenever you use a
new variable or nonstandard symbol for the first time, you must specify
both its type and its meaning, in English. Similarly,
when you describe any algorithm, you must first describe in English
precisely what the algorithm is supposed to do (not just how it works). Any
solution that contains undeclared variables may get a score of
zero, unless it is otherwise perfect. This rule is especially
important for dynamic programming problems.
 Short complete answers are better than longer
answers. Unnecessarily long answers (which by definition are
not perfect) may get a score of zero. See below.
 State your assumptions. If a problem statement is
ambiguous, explicitly state any additional assumptions that
your solution requires. (Please also ask for clarification in
class, in office hours, or on Piazza!) For example,
if the performance of your algorithm depends on how the
input is represented, tell us exactly what representation you
require.
 Don't submit code. Describe your algorithms using
clean, humanreadable pseudocode. Your description should allow a bright
student in CS 225 to easily implement your algorithm in
their favorite language.
 Don't submit your first draft. Revise, revise,
revise. After you figure out the solution, then think about the right way to
present it, and only then start writing what you plan to submit.
Yes, even on exams; do your initial scratch work on the back of the page.
Be Concise
 Keep it short. Most homework problems can be answered
completely in at most two typeset pages or five handwritten pages;
some problems may require considerably less.
 Omit irrelevant details. Don't write "redblack tree" when you mean
"balanced binary tree" or "dictionary". Don't submit code; we want to see
your ideas, not syntactic sugar. If your solution requires more than two
typeset pages, you are probably providing too many irrelevant details.
 Don't regurgitate. Don't explain binary search; just
write "binary search". Don't write the pseudocode for Dijkstra's
algorithm; just write "Dijkstra's algorithm". If the solution
appears on page 6 of Jeff's notes, just write "See page 6 of Jeff's
notes." If your answer is similar to something we've seen in
class, just say so and (carefully!) describe your changes. You will
lose points for vomiting.
 Automatic zero: We will give an automatic zero to
answers which we consider to be too long, unclear, and
repetitious. We will also do it if we can not follow the logic of
your answer. We might even do it without reading them.
(Unlike some past semesters, we do not give any partial credit to "I don't know"
answers.)
Content: What to Write
 Answer the right question. No matter how clear and polished your
solution is, it's worthless if it doesn't answer the question we asked. Make
sure you understand the question before you start thinking about how to answer
it. If something is unclear, ask for clarification! This is especially
important on exams.
 Justify your answers. You must provide a brief justification for
your solutions, as evidence that you understand why they are correct.
Unless we explicitly say otherwise, we generally do not want a
complete proof of correctness—because complete proofs would be too long,
tedious, and unenlightening—but rather a highlevel sketch of the major steps
in the proof. Proofs/justifications are only required on exams if we
specifically ask for them.
 By default, if a homework or exam problem asks you to describe
an algorithm, you need to do several things to get full credit:
 If necessary, formally restate the problem in terms of
combinatorial objects such as sets, sequences, lists, graphs, or trees. In
other words, tell us what the problem is really asking for. This
is often the hardest part of designing an algorithm.
 Give a concise pseudocode description of your algorithm. Don't
regurgitate, and don't turn in code!
 Describe a correct algorithm.
 Justify the correctness of your algorithm. You usually won't
have to do this on exams.
 Analyze your algorithm's running time. This may be as simple as
saying "There are two nested loops from 1 to n, so the running time
is O(n^2)." Or it may require setting up and solving a recurrence, in
which case you'll also have to justify your solution.
 Describe the fastest correct algorithm you can, even if the
problem does not include the words "fast" or "efficient". Faster algorithms
are worth more points; brute force is usually not worth much. We will not
always tell you what time bound to shoot for; that's part of what you're
trying to learn. However, if your algorithm is incorrect, you won't get
any points, no matter how fast it is!
Some problems may deviate from these default requirements. For example, we
may ask you for an algorithm that uses a particular approach, even though
another approach may be more efficient. (Answer the right question!)
Web page adapted from those of previous semesters.