Skip to content

Commit 0721712

Browse files
committed
srm 441 div 2 500
1 parent f184083 commit 0721712

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

PaperAndPaintEasy.cpp

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include <iostream>
2+
#include <sstream>
3+
#include <vector>
4+
#include <algorithm>
5+
#include <set>
6+
#include <map>
7+
#include <queue>
8+
#include <cstring>
9+
#include <climits>
10+
#include <cstdio>
11+
using namespace std;
12+
typedef pair<int,int> pi;
13+
typedef vector<int> vi;
14+
typedef vector<vi> vvi;
15+
typedef vector<string> vs;
16+
typedef vector<vs> vvs;
17+
typedef long long ll;
18+
19+
class PaperAndPaintEasy{
20+
public:
21+
long long computeArea(int ww, int hh, int xxf, int cc, int xx1, int yy1, int xx2, int yy2) {
22+
ll w = ww, h = hh, xf = xxf, c = cc, x1 = xx1, y1 = yy1, x2 = xx2, y2 = yy2;
23+
int xl = min(xf, w-xf);
24+
ll sol = 0;
25+
if(x1 <= xl && xl <= x2) sol += (xl-x1)*2 + (x2-xl);
26+
else if(xl <= x1) sol += (x2-x1);
27+
else sol += 2*(x2-x1);
28+
sol *= (c+1)*(y2-y1);
29+
return w*h - sol;
30+
}
31+
32+
// BEGIN CUT HERE
33+
public:
34+
void run_test(int Case) { if ((Case == -1) || (Case == 0)) test_case_0(); if ((Case == -1) || (Case == 1)) test_case_1(); if ((Case == -1) || (Case == 2)) test_case_2(); if ((Case == -1) || (Case == 3)) test_case_3(); if ((Case == -1) || (Case == 4)) test_case_4(); if ((Case == -1) || (Case == 5)) test_case_5(); }
35+
private:
36+
template <typename T> string print_array(const vector<T> &V) { ostringstream os; os << "{ "; for (typename vector<T>::const_iterator iter = V.begin(); iter != V.end(); ++iter) os << '\"' << *iter << "\","; os << " }"; return os.str(); }
37+
void verify_case(int Case, const long long &Expected, const long long &Received) { cerr << "Test Case #" << Case << "..."; if (Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "\tExpected: \"" << Expected << '\"' << endl; cerr << "\tReceived: \"" << Received << '\"' << endl; } }
38+
void test_case_0() { int Arg0 = 5; int Arg1 = 6; int Arg2 = 2; int Arg3 = 2; int Arg4 = 1; int Arg5 = 1; int Arg6 = 3; int Arg7 = 2; long long Arg8 = 21LL; verify_case(0, Arg8, computeArea(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)); }
39+
void test_case_1() { int Arg0 = 3; int Arg1 = 13; int Arg2 = 1; int Arg3 = 0; int Arg4 = 1; int Arg5 = 8; int Arg6 = 2; int Arg7 = 12; long long Arg8 = 35LL; verify_case(1, Arg8, computeArea(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)); }
40+
void test_case_2() { int Arg0 = 12; int Arg1 = 12; int Arg2 = 7; int Arg3 = 3; int Arg4 = 3; int Arg5 = 1; int Arg6 = 6; int Arg7 = 2; long long Arg8 = 124LL; verify_case(2, Arg8, computeArea(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)); }
41+
void test_case_3() { int Arg0 = 4; int Arg1 = 5; int Arg2 = 4; int Arg3 = 0; int Arg4 = 0; int Arg5 = 0; int Arg6 = 1; int Arg7 = 1; long long Arg8 = 19LL; verify_case(3, Arg8, computeArea(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)); }
42+
void test_case_4() { int Arg0 = 4; int Arg1 = 8; int Arg2 = 4; int Arg3 = 3; int Arg4 = 0; int Arg5 = 1; int Arg6 = 2; int Arg7 = 2; long long Arg8 = 24LL; verify_case(4, Arg8, computeArea(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)); }
43+
void test_case_5() { int Arg0 = 4; int Arg1 = 8; int Arg2 = 3; int Arg3 = 0; int Arg4 = 1; int Arg5 = 1; int Arg6 = 3; int Arg7 = 2; long long Arg8 = 30LL; verify_case(5, Arg8, computeArea(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)); }
44+
45+
// END CUT HERE
46+
47+
};
48+
49+
// BEGIN CUT HERE
50+
int main(){
51+
52+
PaperAndPaintEasy ___test;
53+
___test.run_test(-1);
54+
}
55+
// END CUT HERE

PaperAndPaintEasy.html

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<html><body bgcolor="#000000" text="#ffffff"><table><tr><td colspan="2"><h3>Problem Statement</h3></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td>Onise likes to play with paper and paint. He has a piece of paper with dimensions <b>width</b> x <b>height</b>. He does the following steps with the paper:
2+
3+
<ol>
4+
<li>Fold the paper along the line x = <b>xfold</b> (the left side of the paper is folded over the right side).</li>
5+
<li>Divide the paper vertically into <b>cnt</b>+1 equal sections. Then, <b>cnt</b> times, take the topmost section and fold it over the section below it.</li>
6+
<li>Paint a rectangle with the lower-left corner at (<b>x1</b>, <b>y1</b>) and the upper-right corner at (<b>x2</b>, <b>y2</b>). Note that (0, 0) is now the lower-left corner of the paper in its current folded state, not its original state. The paint will seep through all the layers of the folded paper. See the image below for clarification.</li>
7+
<li>Unfold the paper.</li>
8+
</ol>
9+
10+
For example, let's say Onise has a piece of paper that is 5 x 6. He performs the described steps where <b>xfold</b> is 2, <b>cnt</b> is 2, and the coordinates of the painted rectangle's corners are (1, 1) and (3, 2). The following will happen (note that the paper starts out blue in the images and gets painted white):
11+
12+
<center><img src="http://www.topcoder.com/contest/problem/PaperAndPaint/1.png"></img>&nbsp;
13+
<img src="http://www.topcoder.com/contest/problem/PaperAndPaint/2.png"></img>&nbsp;
14+
<img src="http://www.topcoder.com/contest/problem/PaperAndPaint/3.png"></img>&nbsp;
15+
<img src="http://www.topcoder.com/contest/problem/PaperAndPaint/4.png"></img>&nbsp;
16+
<img src="http://www.topcoder.com/contest/problem/PaperAndPaint/5.png"></img>&nbsp;
17+
<img src="http://www.topcoder.com/contest/problem/PaperAndPaint/6.png"></img></center><br></br><br></br>
18+
19+
You are given ints <b>width</b> and <b>height</b>, and ints <b>xfold</b>, <b>cnt</b>, <b>x1</b>, <b>y1</b>, <b>x2</b> and <b>y2</b>. Return the total area of of the paper that is not covered in paint after Onise is done.</td></tr><tr><td colspan="2"><h3>Definition</h3></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td>Class:</td><td>PaperAndPaintEasy</td></tr><tr><td>Method:</td><td>computeArea</td></tr><tr><td>Parameters:</td><td>int, int, int, int, int, int, int, int</td></tr><tr><td>Returns:</td><td>long long</td></tr><tr><td>Method signature:</td><td>long long computeArea(int width, int height, int xfold, int cnt, int x1, int y1, int x2, int y2)</td></tr><tr><td colspan="2">(be sure your method is public)</td></tr></table></td></tr><tr><td colspan="2"><h3>Limits</h3></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td>Time limit (s):</td><td>2.000</td></tr><tr><td>Memory limit (MB):</td><td>64</td></tr></table></td></tr><tr><td colspan="2"><h3>Constraints</h3></td></tr><tr><td align="center" valign="top">-</td><td><b>width</b> and <b>height</b> will be between 1 and 10^9, inclusive.</td></tr><tr><td align="center" valign="top">-</td><td><b>xfold</b> will be between 0 and <b>width</b>, inclusive.</td></tr><tr><td align="center" valign="top">-</td><td><b>cnt</b> will be between 0 and 1000, inclusive.</td></tr><tr><td align="center" valign="top">-</td><td><b>cnt</b>+1 will be a divisor of <b>height</b>.</td></tr><tr><td align="center" valign="top">-</td><td>0 &lt;= <b>x1</b> &lt; <b>x2</b> &lt;= max(<b>xfold</b>, <b>width</b>-<b>xfold</b>) and 0 &lt;= <b>y1</b> &lt; <b>y2</b> &lt;= <b>height</b>/(<b>cnt</b>+1).</td></tr><tr><td colspan="2"><h3>Examples</h3></td></tr><tr><td align="center" nowrap="true">0)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>5</pre></td></tr><tr><td><pre>6</pre></td></tr><tr><td><pre>2</pre></td></tr><tr><td><pre>2</pre></td></tr><tr><td><pre>1</pre></td></tr><tr><td><pre>1</pre></td></tr><tr><td><pre>3</pre></td></tr><tr><td><pre>2</pre></td></tr></table></td></tr><tr><td><pre>Returns: 21</pre></td></tr><tr><td><table><tr><td colspan="2">The example from the problem statement.</td></tr></table></td></tr></table></td></tr><tr><td align="center" nowrap="true">1)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>3</pre></td></tr><tr><td><pre>13</pre></td></tr><tr><td><pre>1</pre></td></tr><tr><td><pre>0</pre></td></tr><tr><td><pre>1</pre></td></tr><tr><td><pre>8</pre></td></tr><tr><td><pre>2</pre></td></tr><tr><td><pre>12</pre></td></tr></table></td></tr><tr><td><pre>Returns: 35</pre></td></tr><tr><td></td></tr></table></td></tr><tr><td align="center" nowrap="true">2)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>12</pre></td></tr><tr><td><pre>12</pre></td></tr><tr><td><pre>7</pre></td></tr><tr><td><pre>3</pre></td></tr><tr><td><pre>3</pre></td></tr><tr><td><pre>1</pre></td></tr><tr><td><pre>6</pre></td></tr><tr><td><pre>2</pre></td></tr></table></td></tr><tr><td><pre>Returns: 124</pre></td></tr><tr><td></td></tr></table></td></tr><tr><td align="center" nowrap="true">3)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>4</pre></td></tr><tr><td><pre>5</pre></td></tr><tr><td><pre>4</pre></td></tr><tr><td><pre>0</pre></td></tr><tr><td><pre>0</pre></td></tr><tr><td><pre>0</pre></td></tr><tr><td><pre>1</pre></td></tr><tr><td><pre>1</pre></td></tr></table></td></tr><tr><td><pre>Returns: 19</pre></td></tr><tr><td></td></tr></table></td></tr><tr><td align="center" nowrap="true">4)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>4</pre></td></tr><tr><td><pre>8</pre></td></tr><tr><td><pre>4</pre></td></tr><tr><td><pre>3</pre></td></tr><tr><td><pre>0</pre></td></tr><tr><td><pre>1</pre></td></tr><tr><td><pre>2</pre></td></tr><tr><td><pre>2</pre></td></tr></table></td></tr><tr><td><pre>Returns: 24</pre></td></tr><tr><td></td></tr></table></td></tr><tr><td align="center" nowrap="true">5)</td><td></td></tr><tr><td>&#160;&#160;&#160;&#160;</td><td><table><tr><td><table><tr><td><pre>4</pre></td></tr><tr><td><pre>8</pre></td></tr><tr><td><pre>3</pre></td></tr><tr><td><pre>0</pre></td></tr><tr><td><pre>1</pre></td></tr><tr><td><pre>1</pre></td></tr><tr><td><pre>3</pre></td></tr><tr><td><pre>2</pre></td></tr></table></td></tr><tr><td><pre>Returns: 30</pre></td></tr><tr><td></td></tr></table></td></tr></table><p>This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved. </p></body></html>

0 commit comments

Comments
 (0)