Advertisement
Guest User

hmm

a guest
Aug 23rd, 2014
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.48 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. int main () {
  4.     int key = 2;
  5.     int n, i, a, b;
  6.     std::cin >> n;
  7.     for (i=3; i<=n; i++) {
  8.         if (i <= 9) {
  9.             key += 3; // down -> backspace -> new number
  10.         }
  11.         else if (i == 10) {
  12.             key += 2; // down -> 0
  13.         }
  14.         else if (i <= 19) {
  15.             key += 3; // down -> last digit
  16.         }
  17.         else if (i <= 99) {
  18.             key += 5; // down -> left -> backspace -> new number (2 digits)
  19.         }
  20.         else if (i == 100) {
  21.             key += 4; // down -> left -> 00
  22.         }
  23.         else if (i <= 199) {
  24.             key += 5; // down -> left -> left -> last 2 digits
  25.         }
  26.         else if (i <= 999) {
  27.             key += 7; // down -> left -> left -> backspace -> new number (3 digits)
  28.         }
  29.         else if (i == 1000) {
  30.             key += 6; // down -> left -> left -> 000
  31.         }
  32.         else if (i <= 1999) {
  33.             key += 7; // down -> left -> left -> left -> last 3 digits
  34.         }
  35.         else if (i <= 9999) {
  36.             key += 9; // down -> left -> left -> left -> backspace -> new number (4 digits)
  37.  
  38.             /*
  39.             // USELESS CODE. Can be replaced by the 'for' loop below.
  40.             if (n >= 2222) {
  41.                 if (i == 1223) {
  42.                     key += 3; // at 1222: shift -> left -> left -> left -> Ctrl+C -> down -> 223 (10 keys / +3)
  43.                 }
  44.                 if (i == 2220) {
  45.                     key -= 1; // at 2219: down -> left -> left -> left -> backspace -> Ctrl+V -> 0 (8 keys / -1)
  46.                 }
  47.                 if (i == 2221) {
  48.                     key -= 2; // at 2220: down -> left -> left -> left -> left -> Ctrl+V (7 keys / -2)
  49.                 }
  50.                 if (i == 2222) {
  51.                     key -= 2; // at 2221: down -> left -> left -> backspace -> Ctrl+V -> 2 (7 keys / -2)
  52.                 }
  53.                 if (i >= 2223 && i <= 2229) {
  54.                     key -= 1; // see i == 2220
  55.                 }
  56.             }
  57.             if (n < 3332 && i == 3222) {
  58.                 // if n < 3332, we have no reason to copy "333" at 2333
  59.                 key -= 1; // at 3221: down -> left -> left -> left -> backspace -> 3 -> Ctrl+V (6 keys / -3)
  60.             }
  61.             */
  62.            
  63.             for (a=2; a<=9; a++) {
  64.                 if (i == a * 1110 + 2) {
  65.                     key -= 2;
  66.                 }
  67.                 if (i >= a * 1110 + 3 && i <= a * 1110 + 9) {
  68.                     key -= 1;
  69.                 }
  70.                 if (n < (a + 1) * 1111 - 1 && i == (a + 1) * 1111 - 111) {
  71.                     key -= 1;
  72.                 }
  73.             }
  74.         }
  75.         else if (i == 10000) {
  76.             key += 8; // at 9999: left -> left -> left -> down -> 0000
  77.         }
  78.         else if (i <= 19999) {
  79.             key += 9; // down -> left -> left -> left -> left -> last 4 digits
  80.            
  81.             // copy "000" from 10000 then type 10001: shift -> left -> left -> left -> Ctrl+C -> left -> down -> Ctrl+V -> 1 (11 keys / +2)
  82.             // type 10002 ~ 10009: down -> left -> left -> left -> left -> Ctrl+V -> last digit (8 keys / -1)
  83.             if (i >= 10004 && i <= 10009) {
  84.                 key -= 1;
  85.             }
  86.            
  87.             for (a=2; a<=9; a++) {
  88.                 if (i >= a * 1110 + 10003 && i <= a * 1110 + 10009) {
  89.                     key -= 1;
  90.                 }
  91.                 if (n < (a + 1) * 1111 + 10000 && i == (a + 1) * 1111 + 10000 - 111) {
  92.                     key -= 1;
  93.                 }
  94.             }
  95.         }
  96.         else if (i <= 99999) {
  97.             key += 11; // down -> left -> left -> left -> left -> backspace -> new number (5 digits)
  98.             // 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.
  99.             // 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
  100.             // 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
  101.             // 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.
  102.             // Because we will only copy 3 digit numbers, the first digit can be ignored and the same logic as i <= 19999 can be applied.
  103.            
  104.             // copy "000" from b0000 then type b0001: shift -> left -> left -> left -> Ctrl+C -> left -> down -> backspace -> b -> Ctrl+V -> 1 (13 keys / +2)
  105.             // type b0002 ~ b0009: -1 key each because we press Ctrl+V instead of 000
  106.            
  107.             for (b=2; b<=9; b++) {
  108.                 if (i >= b * 10000 + 4 && i <= b * 10000 + 9) {
  109.                     key -= 1;
  110.                 }
  111.                 for (a=2; a<=9; a++) {
  112.                     if (i >= a * 1110 + b * 10000 + 3 && i <= a * 1110 + b * 10000 + 9) {
  113.                         key -= 1;
  114.                     }
  115.                     if (n < (a + 1) * 1111 + b * 10000 && i == (a + 1) * 1111 + b * 10000 - 111 && a != 9) {
  116.                         key -= 1;
  117.                     }
  118.                 }
  119.             }
  120.         }
  121.         else if (i == 100000) {
  122.             key += 10; // down -> left -> left -> left -> left -> 00000
  123.         }
  124.     }
  125.     std::cout << key;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement