Le dernier problème était que je savais que l'expérimentation était importante, mais je ne pouvais pas faciliter la solution.
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")
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)
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])
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