This repository has been archived on 2022-06-22. You can view files and clone it, but cannot push or open issues or pull requests.
usaco-guide/content/1_Intro/Intro_Problems.md

191 lines
5.6 KiB
Markdown
Raw Normal View History

2020-06-03 22:48:48 +00:00
---
2020-06-15 23:19:07 +00:00
id: problems
2020-06-04 01:42:57 +00:00
title: Introductory Problems
2020-06-15 19:15:27 +00:00
author: Nathan Wang, Benjamin Qi, Darren Yao
problems:
- bronze_promote
- bronze_word
- bronze_paint
- bronze_square
2020-06-03 22:48:48 +00:00
---
2020-06-16 00:11:54 +00:00
Solutions for an introductory USACO problem in multiple languages.
2020-06-05 00:37:02 +00:00
<!-- END DESCRIPTION -->
2020-06-16 00:11:54 +00:00
[Technical Specifications for USACO Contests](http://www.usaco.org/index.php?page=instructions)
2020-06-03 16:39:48 +00:00
2020-06-09 00:47:37 +00:00
## Example: [Fence Painting](http://usaco.org/index.php?page=viewproblem2&cpid=567)
2020-06-03 16:39:48 +00:00
2020-06-09 00:47:37 +00:00
USACO will automatically add a newline to the end of your file if it does not end with one. Make sure not to output trailing spaces!
2020-06-08 21:11:15 +00:00
### C++
2020-06-09 00:47:37 +00:00
You can use `ios_base::sync_with_stdio(0); cin.tie(0);` to speed up input and output. See [here](https://codeforces.com/blog/entry/5217) and [StackOverflow](https://stackoverflow.com/questions/31162367/significance-of-ios-basesync-with-stdiofalse-cin-tienull) for more information. Apparently if this is included then it is supposedly prohibited to use `freopen` to redirect `cin` and `cout`, but it works properly on USACO (and I believe that it does in fact result in a significant speedup on large input files).
2020-06-08 21:11:15 +00:00
#### Method 1
Use [freopen](http://www.cplusplus.com/reference/cstdio/freopen/). If you comment out both of the lines containing `freopen` then the program reads from standard in and writes to standard out as usual.
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("paint.in","r",stdin); // reuse standard in to read from "paint.in"
freopen("paint.out","w",stdout); // reuse standard out to write to "paint.out"
vector<bool> cover(100);
int a, b, c, d; cin >> a >> b >> c >> d;
for (int i = a; i < b; ++i) cover[i] = 1;
for (int i = c; i < d; ++i) cover[i] = 1;
int ans = 0;
for (int i = 0; i < 100; ++i) ans += cover[i];
2020-06-09 00:47:37 +00:00
cout << ans;
// cout << ans << "\n"; is OK
// cout << ans << " "; is NOT
// cout << ans << "\n\n"; is NOT
2020-06-08 21:11:15 +00:00
}
```
#### Method 2
Use [ifstream & ofstream](http://www.cplusplus.com/doc/tutorial/files/).
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream fin("paint.in");
ofstream fout("paint.out");
vector<bool> cover(100);
int a, b, c, d; fin >> a >> b >> c >> d;
for (int i = a; i < b; ++i) cover[i] = 1;
for (int i = c; i < d; ++i) cover[i] = 1;
int ans = 0;
for (int i = 0; i < 100; ++i) ans += cover[i];
fout << ans;
}
```
### Java
(link?)
(Scanner?)
(FastScanner?)
2020-06-09 00:47:37 +00:00
Class name can be whatever you want. (?)
2020-06-08 21:11:15 +00:00
```java
import java.io.*;
import java.util.*;
2020-06-09 00:47:37 +00:00
public class paintSol { // must be declared in paintSol.java
2020-06-08 21:11:15 +00:00
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("paint.in"));
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("paint.out")));
int[] cover = new int[100];
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken()), b = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int c = Integer.parseInt(st.nextToken()), d = Integer.parseInt(st.nextToken());
2020-06-15 19:15:27 +00:00
for (int i = a; i < b; i++) cover[i] = 1;
for (int i = c; i < d; i++) cover[i] = 1;
2020-06-08 21:11:15 +00:00
int ans = 0;
2020-06-15 19:15:27 +00:00
for (int i = 0; i < 100; i++) ans += cover[i];
2020-06-08 21:11:15 +00:00
pw.println(ans);
2020-06-15 19:15:27 +00:00
pw.close(); // make sure to include this line -- flushes the output.
2020-06-08 21:11:15 +00:00
}
}
```
2020-06-15 19:15:27 +00:00
Alternatively, an InputReader class that functions very similarly to Scanner but has the faster runtime of BufferedReader.
2020-06-15 19:34:27 +00:00
```java
2020-06-15 19:15:27 +00:00
import java.util.*;
import java.io.*;
public class template {
static class InputReader {
BufferedReader reader;
StringTokenizer tokenizer;
public InputReader() throws FileNotFoundException {
reader = new BufferedReader(new FileReader("template.in"));
tokenizer = null;
}
String next() {
while (tokenizer == null || !tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(reader.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
public double nextDouble() {
return Double.parseDouble(next());
}
}
public static void main(String[] args) throws FileNotFoundException, IOException {
InputReader r = new InputReader();
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("template.out")));
int[] cover = new int[100];
for (int i = a; i < b; i++) cover[i] = 1;
for (int i = c; i < d; i++) cover[i] = 1;
int ans = 0;
for (int i = 0; i < 100; i++) ans += cover[i];
pw.println(ans);
2020-06-15 19:16:47 +00:00
pw.close(); // flush output
2020-06-15 19:15:27 +00:00
}
}
```
2020-06-08 21:11:15 +00:00
### Python 3
See [here](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files).
```py
fin = open("paint.in","r")
fout = open("paint.out","w")
cover = [0 for i in range(100)]
a,b = map(int,fin.readline().split())
c,d = map(int,fin.readline().split())
for i in range(a,b):
cover[i] = 1
for i in range(c,d):
cover[i] = 1
ans = 0
for i in range(100):
ans += cover[i]
fout.write(str(ans))
```
2020-06-03 16:39:48 +00:00
## Problems
2020-06-08 21:11:15 +00:00
Let's begin by solving a few problems! The following require relatively little programming experience and no algorithmic knowledge.
Do as many as you want, then move on! You do not have to do all of them.
2020-06-03 16:39:48 +00:00
- [Promotion Counting](http://usaco.org/index.php?page=viewproblem2&cpid=591)
- [Word Processor](http://usaco.org/index.php?page=viewproblem2&cpid=987)
- [Square Pasture](http://usaco.org/index.php?page=viewproblem2&cpid=663)