Connection Status:
Competition Arena > TheLockDivOne
SRM 445 · 2009-07-23 · by Vasyl[alphacom] · Math, Recursion
Class Name: TheLockDivOne
Return Type: String
Method Name: password
Arg Types: (int, long long)
Problem Statement

Problem Statement

John is obsessed with security. Recently he bought a new electronic lock. It is protected by a password containing n digits, where each digit is either zero or one. John decides to change the password every day. On the first day, the password is all zeroes. On each day that follows, he will select one or more digits that all have the same value and change their values (so zeroes become ones, and ones become zeroes). He must select the digits according to the following rules:

  1. During the first 2^n days, he must never use the same password twice.
  2. Each new password must come as early as possible alphabetically while not violating rule 1.

For example, if n is 2, the password on the first day is "00". The next day, he can change one or both 0's to get "01", "10" or "11". Of these possibilities, "01" comes earliest alphabetically. The next day, he can change either the 0 or the 1 to get "11" or "00". He can't choose "00" because it was already used, so he chooses "11". The next day, he can change one or both 1's to get "10", "01" or "00". He has already used "01" and "00", so he must choose "10".

Given ints n and k, return the password that comes latest alphabetically during the first k days.

Notes

  • If A and B are two Strings of the same length, then A comes earlier alphabetically than B if it contains a smaller character at the first position where the Strings differ.

Constraints

  • n will be between 1 and 50, inclusive.
  • k will be between 1 and 2^n, inclusive.
Examples
0)
2
4
Returns: "11"

This is the example from the statement. The password sequence is the following - "00", "01", "11", "10".

1)
3
8
Returns: "111"

"000", "001", "011", "010", "110", "100", "101", "111".

2)
4
6
Returns: "0110"
3)
10
1
Returns: "0000000000"
4)
10
597
Returns: "1111111001"

Submissions are judged against all 74 archived test cases, of which 5 are shown here. Case numbers match the judge’s.

Coding Area

Language: C++17 · define a public class TheLockDivOne with a public method string password(int n, long long k) · 74 test cases · 2 s / 256 MB per case

Submitting as anonymous