[PYTHON] Codeforces Round # 626 B.Compte des sous-rectangles

https://codeforces.com/contest/1323/problem/B

Matière

--Il existe un c composé de tableaux a et b composés uniquement de 0 et 1. (Les éléments sont générés par $ a [i] * b [j] $) ――Combien de carrés d'aire k existent dans ce c?

Approfondir la compréhension de la matrice possible c

a = [0,1,1,1,1,0,1]
b = [0,1,1,0,1,1,1]
c = []
for i in range(len(a)):
    l = []
    for j in range(len(b)):
        l.append(a[i] * b[j])
    c.append(l)
from pprint import pprint
pprint(c)

Si tu essayes

[[0, 0, 0, 0, 0, 0, 0],
 [0, 1, 1, 0, 1, 1, 1],
 [0, 1, 1, 0, 1, 1, 1],
 [0, 1, 1, 0, 1, 1, 1],
 [0, 1, 1, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 1, 1, 0, 1, 1, 1]]

On obtient, et il existe individuellement des carrés «4 x 2, 4 x 3, 1 x 2, 1 x 3». Ce n'est rien d'autre qu'une combinaison de nombres 1 consécutifs dans les séquences a et b. En regardant les matrices a et b, a est [4,1], b est [2,3], et le carré ci-dessus est exactement ce produit.

Comprendre comment compter les carrés d'aire k

En supposant que la fraction de k est x, considérons un quadrangle de $ x \ fois k / x $. Voici un exemple. --Lorsque k = 4, la fraction est [1,2,4], alors considérons un quadrangle 1x4, 2x2, 4x1. --Lorsque k = 12, le nombre de réductions est [1,2,3,4,6,12], considérez donc les carrés 1x12, 2x6, 3x4, 4x3, 6x2, 12x1. --Si k = 13, c'est un nombre premier, donc 1x13 et 13x1 Pensez-y.

Combien de carrés lx, ly peuvent exister dans un carré x, y?

$ (x --lx + 1) * (y --lx + 1) $ pièces. Cependant, il ne peut pas exister lorsque $ x-lx $ ou $ y-lx $ est un nombre négatif. Vous pouvez voir cela en écrivant combien de 2x2, 1x3 et 1x2 existent dans le carré 3x3.

Mettre en place

Fondamentalement, ce qui précède peut être mis en œuvre. En d'autres termes

Par conséquent, les triangles créés sont comptés par (x, y, nombre) sans énumération. Par exemple, si a = [1,1,0,1,1], b = [1,1,0,1,1]

[[1, 1, 0, 1, 1],
 [1, 1, 0, 1, 1],
 [0, 0, 0, 0, 0],
 [1, 1, 0, 1, 1],
 [1, 1, 0, 1, 1]]

Et il y a quatre carrés 2x2, qui sont le produit d'une liste de 1 nombres consécutifs la = [2,2], lb = [2,2], En stockant la = (2: 2) et lb = (2: 2), un triangle 2x2 peut être calculé comme 2x2. Cela arrivera à temps.

code

def make_divisors(n):
    divisors = []
    for i in range(1, int(n ** 0.5) + 1):
        if n % i == 0:
            divisors.append(i)
            if i != n // i:
                divisors.append(n // i)
    return divisors

n,m,k = map(int, input().split())
data = input().split()
datb = input().split()

divs = make_divisors(k)
rects = []
#Carré avec aire k(x,y)Énumérer
for x in divs:
    rects.append((x, k // x))

from collections import Counter, defaultdict

#Array a,Génère un dictionnaire qui compte le nombre de 1 longueurs consécutives à partir de b
# [1,1,1,0,1,1,1,0,1,1] -> [3,3,2]Parce que c'est la longueur de-> {3:2, 2:1}Devenir un dictionnaire
da = defaultdict(int)
db = defaultdict(int)
cnt = 0
l = len(data)
for i in range(l):
    if data[i] == "1":
        cnt += 1
    if data[i] == "0" or i == l - 1:
        da[cnt] += 1
        cnt = 0

cnt = 0
l = len(datb)
for i in range(l):
    if datb[i] == "1":
        cnt += 1
    if datb[i] == "0" or i == l - 1:
        db[cnt] += 1
        cnt = 0

#compter
res = 0
for lx in da:
    for ly in db:
        for x, y in rects:
            #x fait de a et b*Nombre de carrés y
            reccount = da[lx] * db[ly]
            #print("{0} x {1} count = {4}, find {2} x {3} rect".format(lx, ly, x, y, reccount))
            cx = lx - x
            cy = ly - y
            if cx > -1 and cy > -1:
                #Ajoutez si vous pouvez faire
                cannum = (cx + 1) * (cy + 1) * reccount
                res += cannum
print(res)

https://codeforces.com/contest/1323/submission/72671380

Recommended Posts

Codeforces Round # 626 B.Compte des sous-rectangles
Codeforces Round # 609 (Div.2) (jusqu'à B)
Code de l'Éducation Forces Round 87
Codeforces Beta Round # 13
Codeforces Beta Round # 1
Codeforces Beta Round # 2
Codeforces Round # 643 (Div.2) Révision
Codeforces Round # 679 (Div.2) Révision (10/25)
Codeforces Round # 657 (Div.2) Révision
Python3> rond (a --b, 7)
Codeforces Round # 654 (Div.2) Critique Bacha (8/18)
Codeforces Round # 594 (Div.2) Examen Bacha (10/29)
Code de l'éducation forces Round 93 Bacha Review (8/17)
Codeforces Round # 609 (Div.2) Critique Bacha (10/8)
Code de l'éducation forces Round 94 Bacha Review (9/3)
Code de l'éducation forces Round 91 Bacha Review (7/28)
Codeforces Round # 597 (Div.2) Examen Bacha (10/27)
Codeforces Round # 666 (Div.2) Examen Bacha (9/2)
Codeforces Round # 651 (Div.2) Critique Bacha (8/20)
Codeforces Round # 659 (Div.2) Critique Bacha (8/5)
Codeforces Round # 610 (Div.2) Critique Bacha (10/5)
Codeforces Round # 603 (Div.2) Examen Bacha (10/15)
Code de l'éducation forces Round 88 Bacha Review (8/4)
Codeforces Round # 600 (Div.2) Examen Bacha (10/21)
Codeforces Round # 481 (Div.3) Examen Bacha (9/24)
Codeforces Round # 612 (Div.2) Examen Bacha (10/2)
Codeforces Round # 521 (Div.3) Examen Bacha (10/9)
Code de l'éducation forces Round 86 Bacha Review (9/17)
Codeforces Round # 652 (Div.2) Examen Bacha (8/24)
Codeforces Round # 673 (Div.2) Examen Bacha (10/22)
Codeforces Round # 613 (Div.2) Examen Bacha (10/1)
Codeforces Round # 662 (Div.2) Critique Bacha (8/8)
Codeforces Round # 618 (Div.2) Examen Bacha (9/26)
Codeforces Round # 648 (Div.2) Critique Bacha (9/5)
Codeforces Round # 676 (Div.2) Examen Bacha (10/31)
Codeforces Round # 675 (Div.2) Examen Bacha (10/30)
Codeforces Round # 486 (Div.3) Examen Bacha (9/23)
Codeforces Round # 671 (Div.2) Examen Bacha (9/22)
Code de l'éducation forces Round 89 Bacha Review (9/8)
Codeforces Round # 672 (Div.2) Examen Bacha (10/16)
Codeforces Round # 638 (Div.2) Examen Bacha (9/16)
Codeforces Round # 663 (Div.2) Examen Bacha (8/13)
Codeforces Round # 668 (Div.2) Examen Bacha (9/7)
Codeforces Round # 663 (Div.2) Examen Bacha (8/16)
Codeforces Round # 609 (Div.2) Examen Bacha (10/6)
Codeforces Round # 645 (Div.2) Critique Bacha (9/10)
Code de l'éducation forces Round 90 Bacha Review (8/19)
Codeforces Round # 664 (Div.2) Examen Bacha (8/13)
Codeforces Round # 660 (Div.2) Critique Bacha (8/4)