Advertisement
mixster

Untitled

Jul 12th, 2011
439
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.76 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. #inp = '10,8,6,4,2,1,3,5,7,9'.split(',')
  4. inp = '985 978 969 957 951 946 928 925 906 895 881 878 860 859 843 833 826 822 809 802 783 769 757 753 749 745 742 725 720 710 693 688 674 673 654 643 629 626 618 609 600 593 577 560 556 554 537 523 518 505 501 494 487 483 477 466 452 447 445 435 423 412 408 399 390 386 368 362 357 349 342 327 325 319 305 300 298 284 267 253 240 236 229 211 206 200 199 183 177 162 149 145 137 122 116 104 87 74 62 60 54 37 31 29 18 10 1 20 36 55 58 69 75 77 96 105 106 125 142 147 159 160 178 196 197 198 205 212 226 233 235 238 245 255 274 282 296 311 322 324 326 337 348 350 363 373 375 376 392 405 418 433 434 453 461 469 474 492 508 521 533 539 540 553 569 580 599 601 606 612 621 624 627 638 657 667 678 692 704 711 716 723 729 743 756 759 773 791 795 812 815 817 820 832 836 846 853 857 861 862'.split(' ')
  5. find = '200'
  6. counter = 0
  7.  
  8. def Query(n):
  9.   global counter
  10.   counter += 1
  11.   return inp[n]
  12.  
  13. # Find pivot
  14. l = 0
  15. h = len(inp) - 1
  16. while True:
  17.   m = (h + l) / 2
  18.   if (m >= h):
  19.     break
  20.   if (Query(m) > Query(m + 1)):
  21.     l = m + 1
  22.   else:
  23.     h = m
  24.  
  25. p = m
  26. print "Pivot is", Query(p), "at", p
  27.  
  28. l = 0
  29. h = p
  30. f = False
  31. t = -1
  32. while True:
  33.   m = (h + l) / 2
  34.   t = Query(m)
  35.   #print l, m, h, t
  36.   if (find < t):
  37.     l = m + 1
  38.   elif (find > t):
  39.     h = m - 1
  40.   else:
  41.     f = True
  42.     break
  43.   if (l > h):
  44.     break
  45.  
  46. if (not f):
  47.   l = p
  48.   h = len(inp) - 1
  49.   t = -1
  50.   while True:
  51.     m = (h + l) / 2
  52.     t = Query(m)
  53.     #print l, m, h, t
  54.     if (find > t):
  55.       l = m + 1
  56.     elif (find < t):
  57.       h = m - 1
  58.     else:
  59.       f = True
  60.       break
  61.     if (l > h):
  62.       break
  63.  
  64. if (f):
  65.   print "Found it at " + str(m) + "!"
  66. else:
  67.   print "Did not find it!"
  68. print str(counter) + " queries done"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement