C# – CodeForces – An abandoned sentiment from past

CodeFoces.com is the place where I go when I do not know what to blog about. πŸ™‚

Anyhow, as a developer who is with some experience there, I always expect that the first problems of Division 2 would be quite easy. And by quite easy, I mean that I would be able to solve them in less than 10Β minutes, including the writing of the code and the reading of the problem.

codeforces-logo-with-telegram

However, this is not always the case. Today’s problem (A from contest 814) is looking like this:


A few years ago, Hitagi encountered a giant crab, who stole the whole of her body weight. Ever since, she tried to avoid contact with others, for fear that this secret might be noticed.

To get rid of the oddity and recover her weight, a special integer sequence is needed. Hitagi’s sequence has been broken for a long time, but now Kaiki provides an opportunity.

Hitagi’s sequence a has a length of n. Lost elements in it are denoted by zeros. Kaiki provides another sequence b, whose length k equals the number of lost elements in a (i.e. the number of zeros). Hitagi is to replace each zero in a with an element from b so that each element in b should be used exactly once. Hitagi knows, however, that, apart from 0, no integer occurs in a and b more than once in total.

If the resulting sequence is not an increasing sequence, then it has the power to recover Hitagi from the oddity. You are to determine whether this is possible, or Kaiki’s sequence is just another fake. In other words, you should detect whether it is possible to replace each zero in a with an integer from b so that each integer from b is used exactly once, and the resulting sequence is not increasing.

Input

The first line of input contains two space-separated positive integers n (2 ≀ n ≀ 100) and k (1 ≀ k ≀ n) β€” the lengths of sequence a and brespectively.

The second line contains n space-separated integers a1, a2, …, an (0 ≀ ai ≀ 200) β€” Hitagi’s broken sequence with exactly k zero elements.

The third line contains k space-separated integers b1, b2, …, bk (1 ≀ bi ≀ 200) β€” the elements to fill into Hitagi’s sequence.

Input guarantees that apart from 0, no integer occurs in a and b more than once in total.

Output

Output “Yes” if it’s possible to replace zeros in a with elements in b and make the resulting sequence not increasing, and “No” otherwise.


What is the idea? With other words, we have quite a few cases and they are somehow “reverted” – whenever we are able to make an increasing sequence only, we should be print No.Β In my head, success is always associated with Yes,Β but that was the smallest problem of all.

Let’s start with the cases:

  • If we have more than 1 value in the 2. list (the elements to fill into Hitagi’s sequence) we should always be able to make a non-increasing sequence;
  • If we have the 0 as a first element, we should only check the next one;
  • If we have the 0 as a last element, we should only check the previous one;
  • If we have the 0 as middle element, we should check two;
  • Before even starting to check Β – its a good idea to check the non-changeable elements, whether they are in an increasing sequence;
  • We should also check whether we are given at all any elements in the 2. list.

Having written this, after about 20 minutes of writing IF-ELSE-ELSEIF I have been able to pass the tests. Anyhow, do not do this at home (or at work):

Here comes the code:

Yup. That’s all. As dirty & ugly as it can be! πŸ™‚ But it works, because it has tests! πŸ˜€

Tagged with: , , ,