链接

[http://codeforces.com/contest/1043/problem/D]

题意

给你一个m*n的矩阵(m<=10,n<=1e5),

每一行的数字是1到n里不同的数字

问你这m行中有多少个公共子序列

分析

用一个二维数组保存每一行的每个位置的数字的前面一个数字是什么,

然后后面用最后一行的数字和前面每一行对比,统计就好了,具体看代码就很容易理解了

还有一个组合数学的东西看下面图片就好了

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+10;
int a[N];
ll sum[N];
int pre[12][N];
int main(){
int n,m,i,j;
//freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&m)){
memset(sum,0,sizeof(sum));
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
scanf("%d",&a[j]);//因为重复使用a[],所以最后存的是最后一行的值
if(j>1) pre[i][a[j]]=a[j-1];//第存的是i行a[j]这个数字的前面一个数字
}
ll ans=n;
for(i=2;i<=n;i++){//只需要从第二个列的数字开始就可以了,因为第一个数字前面没有数字
int cnt=0;
for(j=1;j<m;j++)
if(pre[j][a[i]]==pre[m][a[i]])
cnt++;
if(cnt==m-1) sum[i]+=sum[i-1]+1;//如果所有行都有公共的部分就可以加了
//sum[i]+=sum[i-1]+1和组合数学有关,你可以想n个单位矩形挨在一起,
//问你总共有多少个矩形是同一个问题就是个递推
ans+=sum[i];
}
printf("%lld\n",ans);
}
return 0;
}

D. Mysterious Crime的更多相关文章

  1. CodeForces 1043D Mysterious Crime 区间合并

    题目传送门 题目大意: 给出m个1-n的全排列,问这m个全排列中有几个公共子串. 思路: 首先单个的数字先计算到答案中,有n个. 然后考虑多个数字,如果有两个数字相邻,那么在m个串中必定都能找到这两个 ...

  2. [题解]Codeforces Round #519 - D. Mysterious Crime

    [题目] D. Mysterious Crime [描述] 有m个n排列,求一共有多少个公共子段. 数据范围:1<=n<=100000,1<=m<=10 [思路] 对于第一个排 ...

  3. cf1043E. Mysterious Crime(二分 前缀和)

    题意 题目链接 Sol 考场上做完前四题的时候大概还剩半个小时吧,那时候已经困的不行了. 看了看E发现好像很可做?? 又仔细看了几眼发现这不是sb题么... 先考虑两个人,假设贡献分别为\((x, y ...

  4. cf1043D. Mysterious Crime(枚举)

    题意 题目链接 给出\(m\)个长度为\(n\)的排列,问有多少连续公共子串 \(m \leqslant 10, n \leqslant 10^5\) Sol 非常naive的一道题然而交了3遍才过( ...

  5. 【CF1043D】Mysterious Crime(贡献)

    题意:给定m个人,每个人有n个数字且每个人的所有数字都是一个n的排列,求有多少种方案去掉某个前缀和后缀后m个人剩余的部分相等 m<=10,n<=1e5 思路:考虑极长的一段连续匹配的串,因 ...

  6. CF1043D Mysterious Crime

    思路: 参考了http://codeforces.com/blog/entry/62797,把第一个序列重标号成1,2,3,...,n,在剩下的序列中寻找形如x, x + 1, x + 2, ...的 ...

  7. 【Codeforces Round #519 by Botan Investments D】Mysterious Crime

    [链接] 我是链接,点我呀:) [题意] 相当于问你这m个数组的任意长度公共子串的个数 [题解] 枚举第1个数组以i为起点的子串. 假设i..j是以i开头的子串能匹配的最长的长度. (这个j可以给2. ...

  8. Codeforces Round #519 D - Mysterious Crime

    题目 题意: 在m组数,每组有n个数(数的范围1-n)中,找到某些序列 使它是每组数的一个公共子序列,问这样的某些序列的个数? 思路: 不难想出答案ans是≥n的. 创立一个next数组,使每组中第i ...

  9. Mysterious Crime CodeForces - 1043D (哈希)

    大意: 给定m个n排列, 求有多少个公共子串. 枚举每个位置, hash求出最大匹配长度. #include <iostream> #include <sstream> #in ...

随机推荐

  1. Solr全文检索

    1.Solr的安装 .环境要求 jdk1.+tomcat8+solr5.5.0 .将以上的软件包上传到服务器 . 安装tomcat8(解压文件) tar -zxvf apache-tomcat-.ta ...

  2. 软件工程实践_Task1

    (1)回想一下你初入大学时对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的? 说起来,当初选择计算机专业的缘由,更多应该归因于兴趣.虽然对CS全然不知,但也一点都不妨碍对它的神奇感到向往.再 ...

  3. php数据库单例模式理解

    单例模式(职责模式): 简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务: 单例类: 1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符 ...

  4. ug nx7.5安装方法(图文详解)

           UG7.5,也称NX7.5,自卑西门子收购,软件名字已经改为SIEMENS NX了,ug7.5是一套集成了CAD.CAE 和CAM解决方案,能为设计师们提供最功能齐全的设计环境,能够大大 ...

  5. Scrapy中将item字段转为简体or繁体

    1. 安装hanziconv安装一个简繁体转换的包: pip install hanziconv 2. 自定义一个itempiples找到项目中的pipelines.py文件 添加自定义的pipeli ...

  6. 转://对于11gR2的集群relink

    对于11gR2的集群relink参考MOS:Do I need to relink the Oracle Clusterware / Grid Infrastructure home after an ...

  7. pku-2909 (欧拉筛)

    题意:哥德巴赫猜想.问一个大于2的偶数能被几对素数对相加. 思路:欧拉筛,因为在n<215,在3万多,一个欧拉筛得时间差不多4*104, 那么筛出来的素数有4千多个,那么两两组合直接打表,时间复 ...

  8. 查看mysql执行的线程,并杀掉他

    文章转自https://www.cnblogs.com/weiok/p/5672238.html 1.进入mysql/bin目录下输入mysqladmin processlist; 2.启动mysql ...

  9. 查看linux服务器的配置

    https://zhidao.baidu.com/question/489376921.html 1.查看逻辑CPU个数: #cat /proc/cpuinfo |grep "process ...

  10. Java的运算符--与(&)、非(~)、或(|)、异或(^)详解

    一.计算机中存储的都是补码 java也是如此: System.out.println(Integer.toBinaryString(2)); System.out.println(Integer.to ...