SORU
5 Ocak 2011, ÇARŞAMBA


Karakter tuş vuruşlarını kullanan sayısı A, A, Ctrl C ve Ctrl V

Bu röportaj soru google. Kendim çözemez oldum. Birisi biraz ışık tutabilir?

Yazdırmak için bir program yazmak tuş vuruşlarını karakter sayısı'. oluşturduğu bu sıra Sadece 4 tuşları kullanmak için izin verilir:Bir,CtrlBir,CtrlCveCtrlV. Sadece N tuş vuruşlarını izin verilir. TümCtrlkarakterler bir tuş vuruşu olarak kabul edilirCtrlBirbir tuş.

Örneğin, sıraBir,CtrlBir,CtrlC,CtrlVoluşturur iki 4 tuş vuruşlarını.

  • Ctrl A (Tümünü Seç
  • Ctrl C Kopyala
  • Ctrl V Yapıştır

Biraz matematik yaptım. Herhangi bir N, x kullanmak için Bir sayı , birCtrlBirbirCtrlCve yCtrlVmax oluşturabiliriz ((N-1)/2)2numarası. Bazı N ^ için . M, daha çok olarak kullanabilirsinizCtrlBir< . kbd ^/'s,CtrlCveCtrlVbu gibi dizileri A sayısı iki katına çıkar.

SırasıCtrlBir,CtrlV,CtrlColmaz üzerine mevcut seçim. Seçilen kopyalanan seçimi ekleyin.

CEVAP
5 Ocak 2011, ÇARŞAMBA


Dinamik programlama bir çözüm var. Kapalı 0 0 anahtarları bize Bir şey yapabilir bilerek başladık. O zaman biz de içinde yineleme için i n, işin iki şey: tuşuna Bir kez basarak tümünü seç kopyala ve ardından yapıştır j kez (aslında j-i-1 aşağıda; not: burada hile: içeriği hala pano, böylece yapıştırın birden çok kez kopyalama olmadan her zaman). Biz sadece bulundurduk kadar arka arkaya 4 kez yapıştırır, yana seçin, kopyala, yapıştır x 5 eşdeğer seçin, kopyala, yapıştır, seç, kopyala, yapıştır ve ikincisi daha iyidir bu yana bırakır, bizimle daha çok pano. n, ulaştık bir kez istenen sonucu var.

Karmaşıklığı O(N) görünebilir, ama sayıları aslında O üstsel(N . büyüme beri ^sup>2büyük sayıları çarpma karmaşıklığı nedeniyle. Aşağıda bir Python uygulaması. Yaklaşık 0.5 saniye hesaplamak için N=50,000 alır.

def max_chars(n):
  dp = [0] * (n 1)
  for i in xrange(n):
    dp[i 1] = max(dp[i 1], dp[i] 1) # press a
    for j in xrange(i 3, min(i 7, n 1)):
      dp[j] = max(dp[j], dp[i]*(j-i-1)) # press select all, copy, paste x (j-i-1)
  return dp[n]

, j kodu temsil tuşları tuşlara bizim yeni dizisi sonra basılan sayısı. Biz zaten bu aşamada i tuşlara ve 2 yeni tuşlara-tümünü seç ve Kopyala. Bu nedenle yapıştır düşüyoruz j-i-2 kat. Yapıştırmadp[i] A's 1 j-i-1 yapım eklemeliyiz. varolan sırasına ekler beri Bu 2-son satırında j-i-1 açıklar.

Burada bazı sonuçlar (*15=^*. A) sayısı:

  • 7 =>9
  • 8 =>12
  • 9 =>16
  • 10 =>20
  • 100 =>1391569403904
  • 1,000 =>3268160001953743683783272702066311903448533894049486008426303248121757146615064636953144900245 174442911064952028008546304
  • 50,000 =>a very large number!

@Hep varsayımlar devlet gerektiğini SB katılıyorum: iki karakter sayısını iki katına yapıştırmak için sana ihtiyacım yok ki Benim. Bu benim çözüm varsayım doğru olmalı yanlış değilse 7, çok cevap alır.

Durumda birisi formu dizileri kontrol ediyorum neden merak ediyorCtrlBir,CtrlC,Bir,CtrlV: Sonuç her zaman aynı olacaktırBir,CtrlBir,CtrlC,CtrlVhangi benyapındüşünün.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • atKristaBradford

    atKristaBrad

    4 Aralık 2010
  • cyriak

    cyriak

    29 Mart 2006
  • Kindness

    Kindness

    23 Ocak 2006