Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- int main () {
- int key = 2;
- int n, i, a, b;
- std::cin >> n;
- for (i=3; i<=n; i++) {
- if (i <= 9) {
- key += 3; // down -> backspace -> new number
- }
- else if (i == 10) {
- key += 2; // down -> 0
- }
- else if (i <= 19) {
- key += 3; // down -> last digit
- }
- else if (i <= 99) {
- key += 5; // down -> left -> backspace -> new number (2 digits)
- }
- else if (i == 100) {
- key += 4; // down -> left -> 00
- }
- else if (i <= 199) {
- key += 5; // down -> left -> left -> last 2 digits
- }
- else if (i <= 999) {
- key += 7; // down -> left -> left -> backspace -> new number (3 digits)
- }
- else if (i == 1000) {
- key += 6; // down -> left -> left -> 000
- }
- else if (i <= 1999) {
- key += 7; // down -> left -> left -> left -> last 3 digits
- }
- else if (i <= 9999) {
- key += 9; // down -> left -> left -> left -> backspace -> new number (4 digits)
- /*
- // USELESS CODE. Can be replaced by the 'for' loop below.
- if (n >= 2222) {
- if (i == 1223) {
- key += 3; // at 1222: shift -> left -> left -> left -> Ctrl+C -> down -> 223 (10 keys / +3)
- }
- if (i == 2220) {
- key -= 1; // at 2219: down -> left -> left -> left -> backspace -> Ctrl+V -> 0 (8 keys / -1)
- }
- if (i == 2221) {
- key -= 2; // at 2220: down -> left -> left -> left -> left -> Ctrl+V (7 keys / -2)
- }
- if (i == 2222) {
- key -= 2; // at 2221: down -> left -> left -> backspace -> Ctrl+V -> 2 (7 keys / -2)
- }
- if (i >= 2223 && i <= 2229) {
- key -= 1; // see i == 2220
- }
- }
- if (n < 3332 && i == 3222) {
- // if n < 3332, we have no reason to copy "333" at 2333
- key -= 1; // at 3221: down -> left -> left -> left -> backspace -> 3 -> Ctrl+V (6 keys / -3)
- }
- */
- for (a=2; a<=9; a++) {
- if (i == a * 1110 + 2) {
- key -= 2;
- }
- if (i >= a * 1110 + 3 && i <= a * 1110 + 9) {
- key -= 1;
- }
- if (n < (a + 1) * 1111 - 1 && i == (a + 1) * 1111 - 111) {
- key -= 1;
- }
- }
- }
- else if (i == 10000) {
- key += 8; // at 9999: left -> left -> left -> down -> 0000
- }
- else if (i <= 19999) {
- key += 9; // down -> left -> left -> left -> left -> last 4 digits
- // copy "000" from 10000 then type 10001: shift -> left -> left -> left -> Ctrl+C -> left -> down -> Ctrl+V -> 1 (11 keys / +2)
- // type 10002 ~ 10009: down -> left -> left -> left -> left -> Ctrl+V -> last digit (8 keys / -1)
- if (i >= 10004 && i <= 10009) {
- key -= 1;
- }
- for (a=2; a<=9; a++) {
- if (i >= a * 1110 + 10003 && i <= a * 1110 + 10009) {
- key -= 1;
- }
- if (n < (a + 1) * 1111 + 10000 && i == (a + 1) * 1111 + 10000 - 111) {
- key -= 1;
- }
- }
- }
- else if (i <= 99999) {
- key += 11; // down -> left -> left -> left -> left -> backspace -> new number (5 digits)
- // We can copy 3 digits, for example "111" from 20111 and paste for 21110 ~ 21119 (and possibly 22111 if copying "222" at 21222 is not necessary), then copy "222" from 21222 and paste for 22220 ~ 22229 (and possibly 23222), etc.
- // We can also copy 4 digits, however, observe that 4 digit copies are very little used and save only 1 extra key each, and if we hold 4 digit numbers in clipboard it will not allow us to copy 3 digit numbers
- // If we copy "3333" from 23333 and paste for 33330 ~ 33339, it will now allow us to copy "444" in 23444 to use for 24440 ~ 24449, etc. --> not optimized
- // We can copy "999" from 28999 to use from 29990 ~ 29999, then copy "000" from 30000 to use for 30001 ~ 30009 (and possibly 31000 if copying "111" at 30111 is not necessary). This is more efficient than copying "000" from 29000.
- // Because we will only copy 3 digit numbers, the first digit can be ignored and the same logic as i <= 19999 can be applied.
- // copy "000" from b0000 then type b0001: shift -> left -> left -> left -> Ctrl+C -> left -> down -> backspace -> b -> Ctrl+V -> 1 (13 keys / +2)
- // type b0002 ~ b0009: -1 key each because we press Ctrl+V instead of 000
- for (b=2; b<=9; b++) {
- if (i >= b * 10000 + 4 && i <= b * 10000 + 9) {
- key -= 1;
- }
- for (a=2; a<=9; a++) {
- if (i >= a * 1110 + b * 10000 + 3 && i <= a * 1110 + b * 10000 + 9) {
- key -= 1;
- }
- if (n < (a + 1) * 1111 + b * 10000 && i == (a + 1) * 1111 + b * 10000 - 111 && a != 9) {
- key -= 1;
- }
- }
- }
- }
- else if (i == 100000) {
- key += 10; // down -> left -> left -> left -> left -> 00000
- }
- }
- std::cout << key;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement