50 lines
1.0 KiB
Python
50 lines
1.0 KiB
Python
import itertools as it
|
|
import numpy as np
|
|
|
|
n=4
|
|
|
|
def enum(n):
|
|
for i in reversed(range(1,n+1)): #Number of characters considered
|
|
for j in reversed(range(0,n+1)): #Number of characters used
|
|
for k in it.combinations(range(1,i),j):
|
|
yield k+(i,)
|
|
|
|
|
|
def select(n, r):
|
|
a = 0
|
|
e = enum(n)
|
|
x = next(e)
|
|
while x!=r:
|
|
a+=1
|
|
x = next(e)
|
|
if x==r:
|
|
return a
|
|
|
|
def getSoldiers(skills, requirement):
|
|
soldiers = []
|
|
for j in range(len(requirement)):
|
|
if int(requirement[j]):
|
|
for i in range(len(skills)):
|
|
if int(skills[i][j]) and not(i+1 in soldiers):
|
|
soldiers.append(i+1)
|
|
break
|
|
return soldiers
|
|
|
|
|
|
#Test case
|
|
skills = ['00', '10', '01', '11']
|
|
requirement = '01'
|
|
|
|
#using functions
|
|
soldiers = tuple(getSoldiers(skills, requirement))
|
|
choosen = select(n, soldiers)
|
|
|
|
#output
|
|
print(choosen%(10**9+7))
|
|
|
|
|
|
#Maybe the algorithm is right, but it is too long to execute,
|
|
#it didn't pass time limit
|
|
|
|
const a = 5
|