[Python] Boutique d'anguilles de table longue

1. Problème

Le problème de savoir combien de personnes peuvent s'asseoir sur une table circulaire (nombre de tables n). Si même une personne dans un groupe ne peut pas siéger, le groupe reviendra.

L'entrée se compose de m + 1 lignes. Dans la première ligne, n (nombre de sièges) et m (nombre de groupes) sont entrés séparés par des espaces demi-largeur. Dans la ligne i + 1 (1 ≤ i ≤ m), deux entiers a_i (nombre de personnes dans le groupe) et b_i (numéro de siège de départ) sont entrés séparés par un espace demi-largeur.

conditions Dans tous les cas de test, les valeurs saisies remplissent les conditions suivantes: 1≦n≦100 1≦m≦100 1≦a_i≦n 1≦b_i≦n

951A057A-C7C6-4595-ADBF-2CBC7D6FC8E0.jpeg

2. Comment penser

(1) Numéro de table

Quand il y a k personnes dans un groupe i et qu'elles s'assoient de la table b_i Ce groupe

b_i,...,b_(i+k-1)

Il est censé s'asseoir à table jusqu'à.

Par exemple, si le nombre de tables est 6 et (a_i, b_i) = (4,5) ci-dessus Notez que le numéro de table sur lequel vous prévoyez de vous asseoir sera (5,6,1,2) au lieu de (5,6,7,8). Ici, j'ai décidé de penser que tous les numéros de table sont __b_j% n (le reste de b_j divisé par n) __.

(2) Si un groupe siège ou non: Déterminé par la fonction check_arr

Disposition de la table assise: ar_table Un tableau de numéros de table sur lesquels un groupe est censé s'asseoir (Créé avec la fonction make_tblarr): ar_chk Si ar_table contient ne serait-ce qu'un élément de ar_chk, il est jugé qu'il ne peut pas siéger.

(3) Affichage du nombre de personnes assises

Le groupe déterminé à pouvoir s'asseoir dans ce qui précède ajoute ces numéros de table à la disposition des tables assises. Enfin, la taille du réseau de tables de sièges s'affiche.

3. Exemple de code

L'opération a été confirmée.


# coding: utf-8
# Your code here!
in1=input()
arr1=in1.split()
n1=int(arr1[0])
n2=int(arr1[1])

in2=[]
for i in range(n2):
    tmp=input()
    in2.append(tmp)
#print(in2)


def make_tblarr(in2,nmax):
    arr3=[]
    arr2=in2.split()
    nn=int(arr2[0])
    st=int(arr2[1])

    for i in range(nn):
        arr3.append((st+i)%nmax)

    return arr3


#ar_table:Disposition des numéros de table assise
#ar_chk:Séquence à vérifier
#ar_Ar sur table_0 lorsque tous les éléments de chk ne sont pas inclus, 1 lorsque les éléments inclus sont trouvés
def check_arr(ar_table,ar_chk):
    flg=0
    for i in range(len(ar_chk)):
        #L'élément du tableau à vérifier est déjà ar_Si inclus dans le tableau
        if ar_table.count(ar_chk[i])>0:
            #mettre flg à 1
            flg=1
            break
    return flg


retar=[]
for i in range(n2):
    ar3=make_tblarr(in2[i],n1)
#print(ar3)
    if check_arr(retar,ar3)== 0:
        for j in range(len(ar3)):
            retar.append(ar3[j])

print(len(retar))

Recommended Posts

[Python] Boutique d'anguilles de table longue
Table de décalage Django Python
Envelopper de longues expressions en python
[Python] [Table des matières Liens] Programmation Python
table de référence rapide du format datetime python
Premiers pas avec python3
[Python] Quatre-vingt-dix-neuf tables utilisant des instructions for