Attachment 'Matan.py'

Download

   1 #!/usr/bin/env python
   2 # coding: utf
   3 '''
   4 У каждого студента i (1 ≤ i ≤ n) есть его лучший друг p[i].
   5 В первый день подготовки каждый студент учит матанализ по своим лекциям,
   6 утром каждого следующего дня каждый студент передает тетрадку с лекциями своему лучшему другу, но получает тетрадку от студента, чьим лучшим другом он является.
   7 
   8 a1, a2, ..., an, где ai обозначает студента, у кого в третий день подготовки находится тетрадь i-го студента;
   9 b1, b2, ..., bn, где bi обозначает студента, у кого в четвертый день подготовки находится тетрадь i-го студента.
  10 
  11 Вам неизвестен массив p, то есть неизвестно, кто является чьим лучшим другом. Напишите программу, которая по заданным последовательностям a и b находит p.
  12 '''
  13 
  14 import sys
  15 
  16 def gen(N):     # Генератор
  17     g=genI(10)
  18     d,a,b=g.next(),g.next(),g.next()
  19     print N
  20     print " ".join(map(str, a))
  21     print " ".join(map(str, b))
  22 
  23 def genI(N):    # Генератор-генератор :)
  24     import random
  25     a=range(N)
  26     unp=a[:]
  27     random.shuffle(unp)
  28     p=[0]*N
  29     for i in xrange(N):
  30         p[unp[i]]=i
  31     print >> sys.stderr, "*",[c+1 for c in p]
  32     while True:
  33         a=[a[unp[f]] for f in xrange(N)]
  34         yield [e+1 for e in a]
  35 
  36 def check(a,b): # Проверочная функция
  37     p=[0]*len(a)
  38     for i in xrange(len(a)):
  39         p[b[i]]=a[i]
  40     return " ".join(map(lambda c: str(c+1), p))
  41 
  42 if len(sys.argv)>1:
  43     gen(int(sys.argv[1]))
  44 else:
  45     N=int(raw_input())
  46     a=map(lambda c: int(c)-1,raw_input().split())
  47     b=map(lambda c: int(c)-1,raw_input().split())
  48     print check(a,b)
  49     # А вот и решение в одну строчку!
  50     print " ".join(reduce(lambda l,(e,f): l.__setitem__(e,str(f+1)) or l, zip(b,a), [0]*N))

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.

You are not allowed to attach a file to this page.