cf 556C Case of Matryoshkas
http://codeforces.com/contest/556/problem/C
果然一晚上不睡觉会导致读错题么...
需要注意的是 如果有一个是 1 2 4 6 那么 1,2是不必拆开的....
然后我们发现,只有以1为开始且连续的套娃不必拆开....
可以先假设所有都需要拆开,那么一共需要 2*n-k-1次
然后如果有以1为开始连续的,拆的时候少拆一次,装的时候少装一次,所以ans=ans-2
但是需要注意的是....如果只有一个1,比如1 3 5 也算成了长度为1的以1开始连续的,但是这并没有什么卵用....所以最后答案记得ans+2
/************************************************************************* > File Name: code/cf/556C.cpp > Author: 111qqz > Email: rkz2013@126.com > Created Time: 2015年07月12日 星期日 10时24分54秒 ************************************************************************/ #include<iostream> #include<iomanip> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<string> #include<map> #include<set> #include<queue> #include<vector> #include<stack> using namespace std; typedef long long LL; typedef unsigned long long ULL; const int N=1E5+7; int a[N],m[N]; LL n,k,ans; int main() { cin>>n>>k; ans = 2*n-k+1; for (int i = 0 ; i < k ; i++ ) { scanf("%d",&m[i]); for (int j = 0 ; j < m[i];j++) { scanf("%d",&a[j]); if (a[j]==j+1) ans = ans -2; } } cout<<ans<<endl; return 0; }