I participated in the AtCoder contest for the first time. I solved the past questions just a little bit. I'm really a beginner, but I think C is so easy and D can be used. I thought, so I solved it. It didn't work in time. The answer of a programming strong man (Tsuyobito) is too smart for beginners. e? Is there a way to receive such input? !! Is it an ant how to output it? !! It will be like. I will devote myself. For the time being, I would like to think about why the algorithm I thought was not good. It doesn't make sense if you can't write down the operations you think of as code. The problem is from the D problem of ABC148. Here's a quote (I'm going to follow the rules, but please let me know if it's wrong).
(Addition that doesn't matter) I haven't bought an ant book yet. Because I have a small amount of money. If you have it in the school library, you may rent it for the year-end and New Year holidays. I thought I wanted him to buy it, but I made a mistake in the direction, so I was at home. ・ Algorithm textbook-Basics and applications of algorithms shown in practical programs- ・ Algorithm puzzles-Introduction to math puzzles for programmers- I wanted to lend me this book and learn the algorithm first, so I thought it was okay. The former book is older than me ...
D - Brick Break
N bricks are lined up in a horizontal row. The integer a i </ sub> is written on the i (1 ≤ i ≤ N) th brick from the left. You can choose and crush any brick of N-1 or less. As a result, K bricks remain. At this time, for any integer i (1 ≤ i ≤ K), Mr. Sunuke is satisfied when the integer written in the i-th one from the left among the remaining bricks is i. Please output the minimum number of bricks that Mr. Sunuke needs to crush to be satisfied. If that is not possible no matter how you crush it, print -1 instead.
(1) It seems that the numbers should remain in order from 1. ② Then, should I check it with the index from the front and erase the different one [^ 1] How do you decide on a proper noun? And what was the element of the metaphor and why? Such. [^ 1]: This is a mistake. You just have to count it. What is needed in the first place is not the final sequence. Read the problem properly
n = int(input())
a = list(map(int, input().split()))
ans = 0
i = 0
while i + 1 <= len(a):
#index+Delete if 1 is different from the list element
if a[i] != i + 1:
del a[i]
#If they are the same, check the next element
else:
i += 1
#Impossible if you erase everything
if len(a) == 0:
print(-1)
#If you subtract the remaining elements, it will be the number you broke
else:
print(n - len(a))
To TLE in some test cases. Hmmm I thought about it for a while, but I don't know what's wrong ... I'm not confident that it's definitely right. It's not TLE in an infinite loop, but maybe it's time over in a test case where the sequence is too long? I don't fully understand how this works. After that, I was worried about breaking it on the way, but it didn't matter at all, so I omitted it.
③ It might not have been good because I erased them one by one. You can erase it all at once. So,
n = int(input())
a = list(map(int, input().split()))
ans = 0
i = 0
while i + 1 <= len(a):
#index+If 1 is different from the list element
if a[i] != i + 1:
#Check if there is the correct element
if i + 1 in a:
#Delete before the correct element
del a[i:a.index(i + 1)]
#Delete all if there is no correct element
else:
del a[i:]
#index+If 1 is the same as the element in the list, go to the next element
else:
i += 1
#Impossible if you erase everything
if len(a) == 0:
print(-1)
#If you subtract the remaining elements, it will be the number you broke
else:
print(n - len(a))
It doesn't matter at all, but you can read it separately. ~~ It looks like a madman. ~~ [^ 2]
――The shortest code at the moment, I cried because I didn't understand the meaning at all [^ 3] [^ 4] --I'm checking the input directly without even putting the list in the variable --Place a variable that corresponds to the correct element, check the elements of the list from the front, and if they are the same, add +1 to the next ――You can use if in print ... What is this ...?
For some reason I was trying to find a clean line of bricks, but I felt like I just had to count the number of clean bricks.
It seems that you can write if and else statements in one line.
(If true, return this) if (under this condition) else (If false, this is the case)
Like this. I don't even need a colon. It's convenient. So the last 4 lines
print(-1 if len(a) == 0 else n - len(a))
It's fine. I see! Learning. [^ 2]: Compliance [^ 3]: Exaggerated expression [^ 4]: It's not the purpose to write the strongest code right now, it's important to solve the problem as far as you can understand, so don't worry about it.
Recommended Posts