codeforces #310 div1 A
首先我们考虑最暴力的拆解拼凑
显然拆分掉所有的链需要 n-m 次
之后拼凑需要 n-1 次
然后由题目规定可知:
只有从1出发且连续的链不用拆掉,其余的都必须拆掉(因为两个都套有娃娃的套娃不能组合)
我们只需要计算从1出发且连续的链的长度即可
设长度为L
则ans=(n-m)+(n-1)-(L-1)*2
这里的L-1是因为1并没有算入(n-m)+(n-1)中
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> using namespace std; int n,m,Num,x; int ans; int main(){ scanf("%d%d",&n,&m); ans=(n-1)+(n-m)+2; for(int i=1;i<=m;++i){ scanf("%d",&Num); bool f=true; for(int j=1;j<=Num;++j){ scanf("%d",&x); if(f&&x==j)ans=ans-2; else f=false; } }printf("%d\n",ans); return 0; }