|
Sola Fide, Sola Gracia, Sola Scriptura -
Only by Faith, by Grace, and God's word
Last updated on:
07 August 2008 12:04:12 PM
Comment on this volume: None
|
No |
Problem Name |
* |
Algorithm |
|
10500-10508:
I Local Contest in
Murcia 2003 (2003/06/07 7:30-11:30) |
|
10500 |
Robot maps |
4.0 |
Simulation |
|
10501 |
Simplified Shisen-So |
* |
Haven't try yet |
|
10502 |
Counting Rectangles |
3.5 |
Ad Hoc |
|
10503 |
The dominoes solitaire |
4.0 |
Backtracking |
|
10504 |
Hidden squares |
4.5 |
Ad Hoc |
|
10505 |
Montesco vs Capuleto |
* |
Haven't try yet, Bipartite Graph?? |
|
10506 |
The Ouroboros problem |
* |
Haven't try yet, Backtracking |
|
10507 |
Waking up brain |
4.5 |
Set (Union-Find) |
|
10508 |
Word Morphing |
4.0 |
Ad Hoc |
|
10500-10508:
June 2003 Monthly
Contest (2003/06/13 9:00-15:00) |
|
10509 |
R U Kidding Mr. Feynman? |
3.5 |
Math |
|
10510 |
Cactus |
9.9 |
Still in my WA list... |
|
10511 |
Councilling |
* |
Haven't try yet |
|
10512 |
A Day in Math-land |
* |
Haven't try yet |
|
10513 |
Bangladesh Sequences |
* |
Haven't try yet |
|
10514 |
River Crossing |
* |
Haven't try yet |
|
10515 |
Power et
al. |
3.5 |
Math |
|
10516 |
Another Counting Problem |
* |
Haven't try yet |
|
10517 |
Wind of Change! |
* |
Haven't try yet |
|
10518 |
How Many Calls? |
* |
Haven't try yet |
|
10519-10525:
THE SAMS' CONTEST
(2003/06/27 9:00-15:00) |
|
10519 |
!! Really Strange !! |
5.0 |
Math (Big Integer) |
|
10520 |
Determine it |
* |
Haven't try yet |
|
10521 |
Continuously Growing Fractions |
* |
Haven't try yet |
|
10522 |
Height to Area |
4.5 |
Math |
|
10523 |
Very Easy !!! |
* |
Haven't try yet |
|
10524 |
Matriz Reloaded |
* |
Haven't try yet |
|
10525 |
New to Bangladesh? |
4.5 |
Graph (Shortest Path) |
|
10526-10530:
Waterloo ACM Programming Contest
(2003/07/05 17:00-20:00) |
|
10526 |
Intellectual Property |
* |
Haven't try yet |
|
10527 |
Persistent Numbers |
* |
Haven't try yet |
|
10528 |
Major Scales |
4.0 |
Ad Hoc |
|
10529 |
Dumb Bones |
* |
Haven't try yet |
|
10530 |
Guessing Game |
3.0 |
Simulation |
|
10531-10538:
The Elite Panel's 1st Contest
(2003/07/26 9:00-16:00) |
|
10531 |
Maze Statistics |
* |
Haven't try yet |
|
10532 |
Combination! Once Again |
* |
Haven't try yet, Math? nCr ?? |
|
10533 |
Digit Primes |
5.5 |
Math (Prime Number) |
|
10534 |
Wavio
Sequence |
5.5 |
DP (LIS) |
|
10535 |
Shooter |
* |
Haven't try yet |
|
10536 |
Game of
Euler |
9.9 |
WA... |
|
10537 |
The Toll! Revisited |
* |
Haven't try yet |
|
10538 |
Powerful Magic Squares |
* |
Haven't try yet |
|
10539-10548:
UVa OJ August Monthly Contest
(2003/08/23 9:00-15:30) |
|
10539 |
Almost Prime Numbers |
4.5 |
Math (Prime) + Binary Search |
|
10540 |
Maze Statistics |
* |
Haven't try yet |
|
10541 |
Stripe |
* |
Haven't try yet |
|
10542 |
Hyper-drive |
* |
Haven't try yet |
|
10543 |
Traveling Politician |
4.5 |
Graph Traversal |
|
10544 |
Numbering the Paths |
* |
Haven't try yet |
|
10545 |
Maximal Quadrilateral |
* |
Haven't try yet |
|
10546 |
The Eagle's Nest |
* |
Haven't try yet |
|
10547 |
Hidden Truth in Recurrenc |
* |
Haven't try yet |
|
10548 |
Find the Right Changes |
* |
Haven't try yet |
|
10549-10553:
First Fall Waterloo
Contest (2003/09/20 17:00-20:00) |
|
10549 |
Russian
Dolls |
* |
Haven't try yet |
|
10550 |
Combination Lock |
3.0 |
Ad Hoc |
|
10551 |
Basic
Remains |
4.0 |
Math (Base Number + Modulo) |
|
10552 |
Genealogical Research |
* |
Haven't try yet |
|
10553 |
Treasure Map |
* |
Haven't try yet |
|
10554-10558:
Second Fall Waterloo
Contest (2003/09/27 17:00-20:00) |
|
10554 |
Calories from Fat |
4.5 |
Ad Hoc |
|
10555 |
Dead Fraction |
* |
Haven't try yet |
|
10556 |
Biometrics |
* |
Haven't try yet |
|
10557 |
XYZZY |
* |
Haven't try yet |
|
10558 |
A Brief Gerrymander |
* |
Haven't try yet |
|
10559-10566:
ICPC Regional 1st Contest (Warmup) (2003/10/05 10:00-15:00)
|
|
10559 |
Blocks |
* |
Haven't try yet |
|
10560 |
Minimum Weight |
* |
Haven't try yet |
|
10561 |
Treblecross |
* |
Haven't try yet |
|
10562 |
Undraw the Trees |
* |
Haven't try yet |
|
10563 |
Least Squares |
* |
Haven't try yet |
|
10564 |
Paths through the Hourglass |
9.9 |
Must use DP |
|
10565 |
Matrix |
* |
No problem description |
|
10566 |
Crossed Ladders |
* |
Haven't try yet |
|
10567-10574:
ICPC Regional 2nd
Contest (Warmup) (2003/10/11 14:30-21:30) |
|
10567 |
Helping Fill Bates |
* |
Haven't try yet |
|
10568 |
n Group k |
* |
Haven't try yet |
|
10569 |
Number Theory |
* |
Haven't try yet |
|
10570 |
Meeting with Aliens |
* |
Haven't try yet |
|
10571 |
Products |
* |
Haven't try yet |
|
10572 |
Black & White |
* |
Haven't try yet |
|
10573 |
Geometry Paradox |
4.0 |
Math (Geometry) |
|
10574 |
Counting Rectangles |
* |
Haven't try yet |
|
10575-10580:
UVa Local Qualification
Contest (2003/10/25 7:30-11:30) |
|
10575 |
Polylops |
* |
Haven't try yet |
|
10576 |
Y2K Accounting Bug |
4.5 |
Backtracking |
|
10577 |
Bounding box |
* |
Haven't try yet |
|
10578 |
The Game of 31 |
5.0 |
Backtracking + DP |
|
10579 |
Fibonacci Numbers |
4.5 |
Math (Big Integer +
Fibonacci) |
|
10580 |
Ransom Note |
* |
Haven't try yet |
|
10581-10588:
December 2003 Monthly Contest
(2003/12/06 9:00-14:00) |
|
10581 |
Partitioning for fun and profit |
* |
Haven't try yet |
|
10582 |
ASCII
Labyrinth |
4.5 |
Backtracking |
|
10583 |
Ubiquitous Religions |
4.0 |
Set (Union-Find) |
|
10584 |
Text Formalization |
9.9 |
String Processing, troublesome... |
|
10585 |
Center of symmetry |
4.5 |
Math (Geometry) |
|
10586 |
Polynomial Remains |
3.5 |
Math |
|
10587 |
Mayor's posters |
* |
Haven't try yet |
|
10588 |
Queuing at the doctors |
* |
Haven't try yet |
|
10589-10599:
IIUC Online Programming
Contest (2003/12/20 9:00-14:00) |
|
10589 |
Area |
4.0 |
Math |
|
10590 |
Boxes of Chocolates Again |
* |
Haven't try yet |
|
10591 |
Happy
Number |
4.0 |
Simulation |
|
10592 |
Freedom Fighter |
* |
Haven't try yet |
|
10593 |
Kites |
* |
Haven't try yet |
|
10594 |
Data Flow |
* |
Haven't try yet |
|
10595 |
Knight on the Bee Board |
* |
Haven't try yet |
|
10596 |
Morning
Walk |
4.5 |
Graph (Euler Cycle) |
|
10597 |
Right Words |
* |
Haven't try yet |
|
10598 |
Find the Latitude |
* |
Haven't try yet |
|
10599 |
Robots(II) |
* |
Haven't try yet |
Total submit-able problems in this volume:
100
Solved problems: 28
Problems in Wrong Answer list from this volume: 5
Unattempted problems: 67
Total hints in this volume: 36
Don't use DFS -_-', this problem is a pure
simulation only !!!, you can't backtrack like what DFS did and update your
map... your robot CANNOT do that !!!.... Simply simulate the robot movement
according to the problem description (go North,East,South,West... in that
order...)
At first I thought this problem will be
difficult. But when I see the high acceptance rate, I thought that brute
force may be possible... and it is. I have 6 nested loops in my solution
(two for starting index (x1,y1), next two for ending index (x2,y2), and
another final two loops to check whether rectangle with two corners
(x1,y1,x2,y2) have all '1'...). It works :)
Backtracking. Max 13 spaces only. Remember you
can flip domino. i.e. domino (1,2) can be used as domino (2,1). Just try all
possibilities to make sure whether first and last dominoes (given in the
input), can be joined using other given dominoes to fill in the empty
spaces.
Brute force, O(n^4). Do for loops, (i,j) then
(k,l). If grid[i][j] contains the character, then do find the next
grid[k][l] which contains the character too, where k >= i, and l > j
(notice, l strictly greater than j, since we only want to check for east and
south east region to avoid multiple counting).
Okay, after you got index (i,j) and (k,l), you
have "found" two vertices of the square. Now just test the remaining two
vertices of a square (try drawing some squares on a paper to help you
understand the following derivation):
deltaX = k-i;
deltaY = l-j;
vertex3X = k+deltaY;
vertex3Y = l-deltaX;
vertex4X = i+deltaY;
vertex4Y = j-deltaX;
If vertex3[X][Y] and vertex4[X][Y] has the
same character... then yes, this is a square :D, increase counter. If any of
them has different character, no... this is not a square.
Simple isn't it :D.
10507 -
Waking up brain
Every time you encounter the word 'connected',
it's a hint to use disjoint forest Union-Find data structure.
In this problem, you have 2 sets, 1 set of
awake areas (initially you have 3 elements here) and a set of the remaining
slept areas.
Your goal is to check whether for each slept
areas, you have 3 adjacent neighbors who are already in awake set (check
using Find method), if yes then at the end of iteration, Union them with
this awake set (they are now part of awake Set), increment year by 1.
Repeat the above process until no more slept
areas or until there is no more slept area can be awaken. If no more slept
areas, output : "WAKE UP IN, N, YEARS". If there is one or more slept areas
left, output "THIS BRAIN NEVER WAKES UP".
Key hint: Number of words = Number of letters
+ 1. Just find the difference, then order these morphing words according to
their differrence.
Simple math... if n is a perfect cube,
directly output the cubic root of n, otherwise, use Feynman approximation
formula as previewed for square roots... In case you are confused how to
derive the formula, I'll show you how:
n^(1/3) = a + dx
n = (a + dx)^3
n = (a^2 + 2*a*dx + dx^2) (a + dx)
n = a^3 + 3*a^2*dx + (3*a*dx^2) --> drop this small term 3*a*dx^2
n = a^3 + 3*a^2*dx
dx = (n - a^3) / 3*a^2
Feynman will output a + dx as
his approximation answer.
This problem is to check the property of a
given directed graph. It should be a strongly connected graph and have this
"cactus" property as given in the problem statement. I haven't solve this
actually, but this shouldn't be too difficult other than tedious...
Observe this pattern:
Note: I just care the last digit
0^1=0, 0^2=0, 0^3=0, 0^4=0, (0^5 == 0 == 0^1 ...)
1^1=1, 1^2=1, 1^3=1, 1^4=1, (1^5 == 1 == 1^1 ...)
2^1=2, 2^2=4, 2^3=8, 2^4=6, (2^5 == 2 == 2^1 ...)
3^1=3, 3^2=9, 3^3=7, 3^4=1, (3^5 == 3 == 3^1 ...)
4^1=4, 4^2=6, 4^3=4, 3^4=6, (4^5 == 4 == 4^1 ...)
5^1=5, 5^2=5, 5^3=5, 5^4=5, (5^5 == 5 == 5^1 ...)
6^1=6, 6^2=6, 6^3=6, 6^4=6, (6^5 == 6 == 6^1 ...)
7^1=7, 7^2=9, 7^3=3, 7^4=1, (7^5 == 7 == 7^1 ...)
8^1=8, 8^2=4, 8^3=2, 8^4=6, (8^5 == 8 == 8^1 ...)
9^1=9, 9^2=1, 9^3=9, 9^4=1, (9^5 == 9 == 9^1 ...)
To make full use of this pattern, you only
need to consider the last two digits from the input m and n (note that m and
n can be extremely long number, but we only need the last two digits from m
and n).
There is also a special case when n = 0, then
the result will be 1, since everything raised to the power of zero is
defined as 1.
Output n*n - n + 2 using Big Integer. The derivation? I'm not
sure yet... Anyone want to help?
10522 is a maths problem so after figuring out the formula
it's easy to implement. The vague part was that, if any of the input is zero
or negative, the answer must be "invalid". The formula I used was x^2 = 1 /
(A+B+C)(-A+B+C)(A-B+C)(A+B-C) where A,B,C is 1/Ha, 1/Hb, 1/Hc respectively.
So if the rhs is negative, the answer is "invalid", otherwise sqrt it to get
the answer. This was my working.
Let a,b,c be the length of the sides, x be the area
From Heron's formula,
x=sqrt(s(s-a)(s-b)(s-c)) ---(2)
where s=(a+b+c)/2 ---(1)
With x=(1/2)(base)(height), express a,b,c in terms of x,Ha,Hb,Hc,
a = 2x/Ha
b = 2x/Hb
c = 2x/Hc
Sub into eqn (1),
s = (a+b+c)/2
= (2x/Ha + 2x/Hb + 2x/Hc) / 2
= x(1/Ha + 1/Hb + 1/Hc)
And,
s-a = x(-1/Ha + 1/Hb + 1/Hc)
s-b = x( 1/Ha - 1/Hb + 1/Hc)
s-c = x( 1/Ha + 1/Hb - 1/Hc)
Let A,B,C be 1/Ha, 1/Hb, 1/Hc resp. and sub into eqn (2),
x^2 = s(s-a)(s-b)(s-c)
x^2 = x^4 (A+B+C)(-A+B+C)(A-B+C)(A+B-C)
1/x^2 = (A+B+C)(-A+B+C)(A-B+C)(A+B-C)
x^2 = 1 / (A+B+C)(-A+B+C)(A-B+C)(A+B-C) ---(3)
Shortest path problem with multi criteria. You
must prioritize shortest time first, then if ties, shortest distance.
Backtracking or Floyd Warshall (with some modification) will do.
A straightforward problem. Just follow the
problem description.
Set up an array Possible_Guess of 10 elements,
initially all true, every time we encounter "too high", mark this number up
to 10 as false, if we encounter "too low", mark this number down to 1 as
false. Finally when we encounter "right on", check our boolean array, if
true, then Stan is not lying, but if false, Stan is dishonest.
First you will need to know the digit primes.
Use Sieve of Eratosthenes to generate primes from 1 to 1.000.000, then for
each prime found, sum it's digits and check for digit prime property. Store
how many digit primes found so far, so when you are given the range, you can
tell how many digit primes quickly by using digitPrimeSoFar[t2] -
digitPrimeSoFar[t1].
You need an O(n log k) Longest Increasing
Subsequence (DP-LIS) algorithm, where k is the length of the LIS. Probably
you know O(n^2) LIS algorithm, this O(n log k) algorithm is a modification
of that algorithm, by using binary search for the inner loop. For more
detail, please search the internet first.
In this problem, you need to do LIS from left
to right and then LIS from right to left (you can use LDS/longest decreasing
subsequence for this too). To show the common mistake that usually occurs
with this problem, I'll use this test case:
7
1 4 2 3 2 4 1
Output should be 5, yeah, you can't do full
LIS from left to right and obtain increasing sequence: 1 2 3 4, and
decreasing sequence 4 1 => making wavio length of only 3...
10535 - Shooter
(by: Sohel Hafiz)
Find all the polar angles of the end
points of the walls with respect to the shooter's position and then sort
them. Consider a circle of infinite radius, centered at the shooter's
position. And then divide the circle into 2*N sectors with respect the
the sorted polar angles. And then count the number of lines that passes
through each sector completely. Find the maximum of these.
Just emulate all the possibilities and use
memoization. I'll write more after I got this accepted...
Use sieve to generate the primes between 1 and 1.000.000, then
find all multiples of these primes. Sort the multiples (prime^2,
prime^3...and so on while not exceeding 10^12) and use binary search
to get the answer. (Almost prime is a non-prime which only have one prime
factor, so obviously, multiples of a prime number is "almost prime number").
For your information, there exist 80070 almost
prime numbers from 1 to 10^12, which can be pre-calculated and stored easily
in a long long array of size 80070.
This is combination of Dynamic Programming and
Big Integer. DP is simple. You can also use mathematic. (Tip : Use DP to
avoid big number multiplication and division)
This long (and a bit confusing) problem
description can be reduced into a simple BFS/DFS problem (BFS is more
appropriate). You need to find a path with length k <= path_len <= 20
(omitting the last city as intermediate vertex, since when you reached last
city, you must stop...). If your path_len is less than k or greater than 20,
output "LOSER".
This problem can be solved easily using
backtracking. First, you must sort the dolls by their heights to reduce the
searching area then use backtracking to try all possible placement.
Easy problem just follow the steps in the
problems. Be careful! Notice the combination lock picture. Due to this
picture, the clockwise dial will have counter-clockwise effect and the
counter-clockwise dial will have clockwise effect.
Compute (An An-1
An-2… A1A0) (base b) modulo (R)10,
denoted by (s)10 = (An An-1 An-2…
A1A0)b mod (R)10
Simulate the modulo step by step using the
following algorithm:
s = 0;
for (i=n; i>=0; i--) {
s *= b;
s += An;
s %= R;
}
For those with poor English, it will be a hard task to decipher the meaning
of the first two paragraphs, which basically just a medical information
regarding fat... I'll give you a summary of the problem description
again here:
You'll be given a list of foods
Each food has 5 components: fat, protein, sugar, starch, and alcohol
Each component is given in 3 formats: grams, Calories, and percent Calories
What you need to do is to convert all food's components to calories and then
give percentage, how many calories actually comes from the fat component...
The hardest thing maybe the conversion between grams, Calories, and
percentage to Calories...
for grams to Calories, you are given a rules that:
1g fat = 9 Calories,
1g protein = 4 Calories,
1g sugar = 4 Calories,
1g starch = 4 Calories,
1g alcohol = 7 Calories
for Calories, you don't need to convert... just accumulate total Calories so
far
for percent Calories to Calories, you need to accumulate total Calories from
other food's components first, and then the actual Calories for that
particular food is:
total Calories from other components * 100 / (100-totalPercentCalories of
this food)
At the end, if total Calories is 100 Cal and 20 Cal of it comes from fat,
output 20/100 = 20%
and so on...
The trap is that there is no 'impossible' case actually. If only t is given,
you can assume that r1 = r2, t become the diameter of the outer circle :)
Thus the area of the outer circle becomes PI*(t/2)*(t/2) and area of the two
identical inner circles become 2*PI*(t/4)*(t/4), thus the area of the gray
part = (PI*t*t)/4 - (PI*t*t)/8 = (PI*t*t)/8.
While in the other case, you are given r1 and r2. Calculating the gray area
will be:
PI*(r1+r2)*(r1+r2) - PI*r1*r1 - PI*r2*r2 = (outer circle area-2 inner
(different) circle area)
PI*r1^2 + 2*PI*r1*r2 + PI*r2^2 - PI*r1^2 - PI*r2^2 = (expand the equation)
2*PI*r1*r2. (after simplification)
Btw, don't forget to define PI as 2*acos(0.0),
otherwise you'll get that stupid precision error problem.
10576 -
Y2K Accounting Bug (N/A)
I forgot how I
derive the solution. This is a backtracking problem anyway.
10578 - The
Game of 31 (N/A)
I forgot how I
derive the solution. You can solve this either using backtracking or DP.
This is a 'simple'
Fibonacci number problem. The difficult part is that you need to use Big Integer to hold values up to 1000 digits.
The given input is complex
text based pattern..., carefully read the input and convert them to a nice
data structure. I'll tell you my way.
+---+ ==> I represent this with constant 0
| |
| |
| |
+---+ ==> I represent this with constant 1
| |
|***|
| |
+---+ ==> I represent this with constant 2
| |
|** |
| * |
So, the sample input:
+---+---+---+---+---+---+
| | | | | |
|
|***|***|** |** |** |***|
| | | * | * | * | |
+---+---+---+---+---+---+
| | | | | |
|
| |** |** |***|** |** |
| | * | * | | * | * |
+---+---+---+---+---+---+
| | | | | |
|
|***|** |***|***|***|** |
| | * | | | | * |
+---+---+---+---+---+---+
| | | | | |
|
|** | |***| |** |** |
| * | | | | * | * |
+---+---+---+---+---+---+
will be translated to:
1-1-2-2-2-1
0-2-2-1-2-2
1-2-1-1-1-2
2-0-1-0-2-2
Now the remaining task is to start from top
left square, do an exhaustive backtracking to see whether you can reach
bottom right square, considering that square indicated with 0 will block
your way, square indicated with 1 will bypass your direction, and square
indicated with 2 will have two choices, turn left or turn right (because you
can rotate your square rite).
For the sample input, the two solutions
possible are indicated below:
1-1-2-2-2-1
0-2-2-1-2-2
1-2-1-1-1-2
2-0-1-0-2-2
and
1-1-2-2-2-1
0-2-2-1-2-2
1-2-1-1-1-2
2-0-1-0-2-2
Use Union-Find data
structure. Prepare n sets of n students. Union set i (representing student
i) and set j (representing student j) if they believe in the same religion.
At the end, output how many sets remaining.
Sort the input points
based on x-axis first. If there are ties, sort by y-axis, then greedyly
compute the mid point of point 1 and n, and then check whether points
(2,n-1),(3,n-2)... and so on have exactly the same middle point...
There is a quick way to solve this
problem. I will illustrate it with sample input 1:
You must divide polynomial: 6 3 3 2 0 1 (x^5+2x^3+3x^2+3x+6) with 1 0
1 (x^2+1)
Simply:
6 3 3 2 0 1
1 0 1 (align to the rightmost non
zero coefficients)
----------- -
6 3 3 1 0 0
1 0 1 (align to the rightmost non
zero coefficients)
----------- -
6 2 3 0 0 0
3 0 3 (align to the
rightmost non zero coefficients, times 3)
----------- -
3 2 0 0 0 0
Since 3 2 represents 2x+3 which is already smaller than 1 0 1 (x^2+1),
stop here and output 3 2 as the polynomial remain :). This algorithm is very
fast :)
In the input format... be careful with this
special case for N, which can be represented as 10^k. After that, this
problem is just testing whether points (x,y) is inside the stripe. For (x,y)
(note that this point is always inside rectangle) to be inside the striped
region, it should be inside the four circles with radius a, originated at
A,B,C,D. You can then use your math formula, that a point (x0,y0) is inside
circle (x,y,r) if (x-x0)^2 + (y-y0)^2 <= r^2.
Notice that there’s typo in the problem description, area
should be m*a*a/n.
Simulate the process. Taking into account that
Unhappy numbers have 'eventually periodic' sequences of Si which do not
reach 1. Once you detect this periodic sequence, stop it at once and output
"Unhappy", otherwise you'll get TLE/crash. Note that 'eventually periodic'
is not always start with the original number.
Examples:
4 -> 16 -> 37 -> 58 -> 89 ->
145 -> 42 -> 20 -> 4.
This sequence starts with 4 and 4 occurs again later, a periodic sequence.
=> 4 unhappy.
17 -> 50 -> 25 -> 29 -> 85 -> 89 -> 145 ->
42 -> 20 -> 4 -> 16 -> 37 -> 58 -> 89.
This sequence starts with 17, but there is periodic subsequence inside.
=> 17 unhappy.
Refer to
http://mathworld.wolfram.com/HappyNumber.html for more details.
This problem is just to determine the
existence of Euler Cycle.
Theorem: A directed graph possesses an Eulerian cycle iff
1) It is connected
2) For all {v} in {V} indegree(v) = outdegree(v)
But, in this problem, you have several special cases:
1. You don't really need to visit all vertex,
only visit R edges given... done...
So, input:
3 2
0 1
1 0
Must be answered: "Possible", even though vertex '2' is not visited at all
2. No need in / out degree... just check whether the total degree is even,
because we assume that the graph is undirected...
3. Surprisingly, you only need to check the
connectedness of the graph by checking whether vertex 0 (Kamal's starting
point), is connected to any of the other vertex (i.e. degree of vertex 0 is
not 0).
This can solved by LIS algorithm. Convert this
problem to a LIS problem. Observe if you are in (r1,c1) and you can go to
(r2,c2) then r2>=r1 AND c2>=c1. So if you pick up coords of the garbages
then you can find the Longest Increasing Subsequences to know the maximum
number of garbage that you can collect. And to find the number of possible
ways, you just need to count all possible LISs.
It is not so difficult. Start with the numbers that can be at the end of LIS.
Give each a number of possibilities 1 then for all numbers that can be one
before the end, sum up the values of all numbers that can follow them. Then
for all numbers two before the end, sum up the values of all numbers one
before the end that can follow them.
For example:
1 3 2 6 5
length of LIS is 3
6 and 5 can be at the end of LIS
then 3 and 2 one before the end and LIS starts with 1
1 3 6 (1)
2 5 (1)
you give 6 and 5 number of possibilities 1
1 3 (2) 6 (1)
2 (2) 5 (1)
3 and 2 get both 1, because after 3, there can be either 6 or 5 as
last number of LIS and similar with 2 and 1 gets number 4 (sum of values of
2 and 3).
but you can't always sum up all values; sometimes you must skip numbers that
can't follow in LIS
Example:
1 3 4 2
1 3 4
2
for 2 value is 0, because 4 can't follow 2 in LIS
so for this check you need to know the original position of each number.
This document, volC5.html, has been accessed 11558 times since 16-Sep-03 11:34:41 SGT.
This is the 5th time it has been accessed today.
A total of 5751 different hosts have accessed this document in the
last 1803 days; your host, 38.103.63.60, has accessed it 1 times.
If you're interested, complete statistics for
this document are also available, including breakdowns by top-level
domain, host name, and date.
|