[PYTHON] AtCoder Beginner Contest 122 Revue des questions précédentes

Temps requis

スクリーンショット 2020-01-29 23.13.54.png

Impressions

Le dernier problème était que je savais que l'expérimentation était importante, mais je ne pouvais pas faciliter la solution.

Problème A

Sortie appropriée en utilisant l'opérateur ternaire.

answerA.py


b=input()
print("A" if b=="T" else "T" if b=="A" else "G" if b=="C" else "C")

Problème B

Si l'un des AGCT arrive, ajoutez-le et si un autre caractère arrive, remettez-le à zéro.

answerB.py


x=["A","G","C","T"]
ans=0
now=0
for i in input():
    if i in x:
        now+=1
    else:
        now=0
    ans=max(now,ans)
print(ans)

Problème C

Dans ce cas, nous utilisons la somme cumulée car nous devons traiter la requête pour l'intervalle à la fin. Cependant, veuillez noter que lorsque vous trouvez AC, vous devez ajouter +1 à l'index ** avec ** C.

answerC.py


n,m=map(int,input().split())
n,q=map(int,input().split())
s=input()
x=[0]*n

for i in range(n-1):
    if s[i:i+2]=="AC":
        x[i+1]=x[i]+1
    else:
        x[i+1]=x[i]
for i in range(q):
    l,r=map(int,input().split())
    print(x[r-1]-x[l-1])

Problème D

Ici, si la chaîne de caractères AGC n'apparaît pas jusqu'au i-ème caractère même si les deux caractères adjacents sont échangés, si la chaîne de caractères AGC n'apparaît pas pour la chaîne de caractères comprenant le i + 1e caractère, jusqu'à i + 1 On peut dire que la chaîne AGC n'apparaît pas. Par conséquent, il semble que la réponse sera recherchée en ** pensant en ordre de face **. Ici, en considérant une chaîne de caractères dans laquelle apparaît une chaîne de sous-caractères appelée AGC, cinq modèles ** AGC, ACG, GAC, A? GC, AG? C, ** peuvent être considérés (les deux derniers sont des angles morts). Ta ...). Par conséquent, nous avons commencé à penser de l'avant et lorsqu'une sous-chaîne correspondant aux 5 modèles est apparue, nous ne l'avons pas incluse dans le comptage. Ici, ** 5 sous-chaînes de motifs ont toutes une longueur de 4 ou moins, donc lorsque l'on considère le i-ème caractère, il est seulement nécessaire de connaître les caractères i-1, i-2, i-3 **. Par conséquent, enregistrez les chaînes de sous-caractères des caractères i-3 à i-1 dans le dictionnaire, et lors de l'ajout de chaque caractère de A, G, C, D au caractère ** i, les sous-caractères qui s'appliquent aux 5 modèles. Vous pouvez trouver la bonne réponse en mettant à jour la valeur dans le dictionnaire ** uniquement lorsque la colonne n'apparaît pas. En outre, à ce stade, il est nécessaire d'enregistrer une fois dans un autre dictionnaire au lieu du dictionnaire d'origine. (J'ai essayé d'écrire 64 façons sans utiliser de dictionnaire pour ce problème ... ** Je devrais réfléchir de manière plus abstraite. **)

answerD.py


n=int(input())
alph=["A","C","G","T"]
a=[alph[i]+alph[j]+alph[k] for i in range(4) for j in range(4) for k in range(4)]
d1={l:0 for l in a}
for i in d1:
    if i!="AGC" and i!="ACG" and i!="GAC":
        d1[i]=1
d2={l:0 for l in a}
for i in range(n-3):
    for j in d1:
        next=[j+alph[k] for k in range(4)]
        for k in range(4):
            l=next[k]
            if l[1:]=="GAC" or l[1:]=="ACG" or l[1:]=="AGC":
                pass
            elif l[0]=="A" and l[3]=="C" and (l[1]=="G" or l[2]=="G"):
                pass
            else:
                d2[l[1:]]+=d1[j]
    for j in d1:
        d1[j]=d2[j]
        d2[j]=0
print(sum(d1.values())%1000000007)

Recommended Posts

AtCoder Beginner Contest 102 Revue des questions précédentes
AtCoder Beginner Contest 072 Revue des questions précédentes
AtCoder Beginner Contest 085 Revue des questions précédentes
AtCoder Beginner Contest 062 Revue des questions précédentes
AtCoder Beginner Contest 113 Revue des questions précédentes
AtCoder Beginner Contest 074 Revue des questions précédentes
AtCoder Beginner Contest 051 Revue des questions précédentes
AtCoder Beginner Contest 127 Revue des questions précédentes
AtCoder Beginner Contest 119 Revue des questions précédentes
AtCoder Beginner Contest 151 Revue des questions précédentes
AtCoder Beginner Contest 075 Revue des questions précédentes
AtCoder Beginner Contest 054 Revue des questions précédentes
AtCoder Beginner Contest 110 Revue des questions précédentes
AtCoder Beginner Contest 070 Revue des questions précédentes
AtCoder Beginner Contest 105 Revue des questions précédentes
AtCoder Beginner Contest 112 Revue des questions précédentes
AtCoder Beginner Contest 089 Revue des questions précédentes
AtCoder Beginner Contest 069 Revue des questions précédentes
AtCoder Beginner Contest 079 Revue des questions précédentes
AtCoder Beginner Contest 056 Revue des questions précédentes
AtCoder Beginner Contest 087 Revue des questions précédentes
AtCoder Beginner Contest 067 Revue des questions précédentes
AtCoder Beginner Contest 093 Revue des questions précédentes
AtCoder Beginner Contest 046 Revue des questions précédentes
AtCoder Beginner Contest 123 Revue des questions précédentes
AtCoder Beginner Contest 049 Revue des questions précédentes
AtCoder Beginner Contest 078 Revue des questions précédentes
AtCoder Beginner Contest 081 Revue des questions précédentes
AtCoder Beginner Contest 060 Revue des questions précédentes
AtCoder Beginner Contest 104 Revue des questions précédentes
AtCoder Beginner Contest 057 Revue des questions précédentes
AtCoder Beginner Contest 121 Revue des questions précédentes
AtCoder Beginner Contest 126 Revue des questions précédentes
AtCoder Beginner Contest 090 Revue des questions précédentes
AtCoder Beginner Contest 103 Revue des questions précédentes
AtCoder Beginner Contest 061 Revue des questions précédentes
AtCoder Beginner Contest 059 Revue des questions précédentes
AtCoder Beginner Contest 044 Revue des questions précédentes
AtCoder Beginner Contest 048 Revue des questions précédentes
AtCoder Beginner Contest 124 Revue des questions précédentes
AtCoder Beginner Contest 116 Revue des questions précédentes
AtCoder Beginner Contest 097 Revue des questions précédentes
AtCoder Beginner Contest 088 Revue des questions précédentes
AtCoder Beginner Contest 092 Revue des questions précédentes
AtCoder Beginner Contest 099 Revue des questions précédentes
AtCoder Beginner Contest 065 Revue des questions précédentes
AtCoder Beginner Contest 094 Revue des questions précédentes
AtCoder Beginner Contest 063 Revue des questions précédentes
AtCoder Beginner Contest 107 Revue des questions précédentes
AtCoder Beginner Contest 071 Revue des questions précédentes
AtCoder Beginner Contest 082 Revue des questions précédentes
AtCoder Beginner Contest 084 Revue des questions précédentes
AtCoder Beginner Contest 068 Revue des questions précédentes
AtCoder Beginner Contest 058 Revue des questions précédentes
AtCoder Beginner Contest 043 Revue des questions précédentes
AtCoder Beginner Contest 098 Revue des questions précédentes
AtCoder Beginner Contest 114 Revue des questions précédentes
AtCoder Beginner Contest 120 Revue des questions précédentes
AtCoder Beginner Contest 108 Revue des questions précédentes
AtCoder Beginner Contest 106 Revue des questions précédentes
AtCoder Beginner Contest 122 Revue des questions précédentes