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;
}

 

posted @ 2015-07-12 11:39  111qqz  阅读(312)  评论(0编辑  收藏  举报