Codeforces 555A Case of Matryoshkas doll
N dolls numbered 1 ~ N. The doll on a chain must meet the requirement that the doll with a small number be placed on the doll with a large number. Two operations are required: 1. Remove the doll with the largest number. 2. Place a doll on a chain on a doll that is not on any other chain (a little winding ). For example, if there is a chain 1 → 2 → 4 → 5, you can remove 5, and then turn it into two chains 1 → 2 → 4 and 5, or set this chain to 6, but 6 cannot be mounted on any other chain, and it becomes 1 → 2 → 4 → 5 → 6. The question requires that all dolls be put on a chain with the minimum number of steps.
It is quite simple to think clearly. Each doll requires a maximum of two steps-split and set. We can think like this. On the chain where the doll numbered 1 is located, 1 does not need to be removed. That is, no operation is required. If 1 set is on 2, 2 does not need to be split, and if 2 sets are on 3, 3 does not need to be split ...... similarly, numbers starting from 1 on this chain do not need to be split. Until a place is not continuous, for example, 1 → 2 → 3 → 4 → 6 → 7 → 8, 4 of which are on 6, then 5 must be on another chain, remove all dolls after 6 (including 6), connect 5 to 6, and then connect 6 to 8. From this point of view, numbers starting from 1 on this chain do not need to be split. In the event of a non-continuous occurrence, all the following items should be removed from the non-continuous occurrence of the doll. For other chains, we set the doll with the smallest number as A, because it is not 1, so there are dolls smaller than it need to be placed on, however, the subject stipulates that A cannot be set on other dolls, and A is the smallest doll on this chain, so all the dolls except A on this chain should be removed. From this point of view, all other chains must be completely detached. The smallest doll on each chain does not need to be split, but requires a set. For dolls to be split, you must perform the operation twice, that is, split + sets. For dolls that do not need to be split but need to be set, you need to perform the operation once. For dolls that do not need to be split or set, no operation is required. In this way, you can directly calculate. It can be proved that this is definitely the least number of operation steps. On the one hand, this is the minimum number of steps required. On the other hand, except for the continuous number not removed from 1, all the remaining dolls are split into a single one. Therefore, you can directly set the numbers one by one without any additional steps. Therefore, this must be the operation with the minimum number of steps.
The chain where the doll numbered 1 is located has a total of cnt numbers starting from 1, and the answer is 2*(n-cnt-(k-1 )) + 1 * (k-1) = 2 * (n-cnt)-k + 1 is the formula. So we only need to find the cnt and use the formula to calculate it.
#include
#include
#include
#include
#include
#include #include
#include
#include
#include
#include
using namespace std;const int MAX = 100005;int n, k;void solve(){ int m, x, temp, cnt = 1, ans = 2*n - k + 1; bool flag; while(k--) { scanf("%d", &m); scanf("%d", &x); if(x == 1) flag = true; else flag = false; temp = x; while(--m) { scanf("%d", &x); if(x != temp + 1) flag = false; if(flag) cnt++; temp = x; } } printf("%d\n", ans - 2*cnt);}int main(){ while(scanf("%d%d", &n, &k) != EOF) solve(); return 0;}
Zookeeper