题目链接:点击查看

题目大意:规定一个数列中在不改变内部顺序的前提下,至少存在着一组(i,j)满足:

  1. i<j
  2. a[i]<a[j]

就称该数列为上升数列,现在给出n组数列,每两组数列可以进行拼接操作,即Sx={1,2,3},Sy={4,5,6},Sx+Sy={1,2,3,4,5,6},Sy+Sx={4,5,6,1,2,3},现在问n^2种组合可以组成多少个上升数列

题目分析:挺综合的一道题目吧,情况得讨论清楚,不然很容易过了第一个样例然后过不去第二个样例。。不过这个题目的样例给的很良心,三个样例都过掉基本上就已经AC了

首先我们可以给数列分类,分为上升数列,如{0,2,0,2},也就是单独拿出来就是一个上升数列,剩下的就是非上升数列,非上升数列也包括两种,一种是下降数列,也就是{8,8,7,7,6,6},还有一种是相等的数列,如{6,6,6},下降数列和相等数列我们姑且视为一种数列,分完类后我们称上升数列为up,其他数列为down,则有下列四种组合方式:

  1. up1+up2:上升数列
  2. up+down:上升数列
  3. down+up:上升数列
  4. down1+down2:如果down1中的最小值小于down2中的最大值,则是上升数列,否则不是

分析到这里就差不多了,我们可以预处理出所有的上升数列,因为只要和上升数列有组合关系的数列组合后的新数列一定是上升数列,那么对答案的贡献为2*(n-1)+1,n-1代表的是除了当前上升数列之外的n-1个数列与其拼接,前后为两种情况,故乘二,最后的加一是其本身前后拼接而成的,不过需要注意一点,也是卡了我好久的一个细节,如果有多个上升数列,在处理第一个上升数列时,n-1个其他数列中也会存在上升数列,所以会重复,我们可以选择在处理完第一个上升数列后记录一下,以后再处理类似情况的时候就不再记录就好了

剩下的就是用简单dp模拟第四种情况了,可以枚举n次,让每一个数列位于前面的位置时的贡献,也可以记录让每一个数列位于后面时的贡献,看个人喜好吧

最后就是记得开longlong,第一发没开longlong白给了一发。。

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e6+100;int dp[N],mmax[N],vis[N];//dp[i]:从0~i有多少个最小值,mmax[i]:第i个数列的最大值,vis[i]:第i个数列是否为上升数列int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n,nn;LL ans=0;scanf("%d",&n);nn=n;//用nn标记还剩多少个数列,用来专门处理上升数列重复计算的情况for(int i=1;i<=n;i++){int mmin=inf;mmax[i]=-inf;int num;scanf("%d",&num);while(num--){int x;scanf("%d",&x);mmin=min(mmin,x);mmax[i]=max(mmax[i],x);if(x>mmin)vis[i]=true;}if(vis[i])//如果当前数列为上升数列,计算贡献,并令nn--,后续不再重复计算{ans+=2*(nn-1)+1;nn--;}elsedp[mmin]++;}for(int i=1;i<N;i++)//维护一下dp数组dp[i]+=dp[i-1];for(int i=1;i<=n;i++){if(!vis[i])ans+=dp[mmax[i]-1];}printf("%lld\n",ans);return 0;
}

CodeForces - 1284B New Year and Ascent Sequence(乱搞)相关推荐

  1. 1284B. New Year and Ascent Sequence

    B. New Year and Ascent Sequence:题目 小小思维题 #include <bits/stdc++.h> using namespace std; #define ...

  2. CodeForces - 747D Winter Is Coming(xjb乱搞)

    题目链接:http://codeforces.com/problemset/problem/747/D点击打开链接 D. Winter Is Coming time limit per test 1 ...

  3. 【CodeForces - 569B】Inventory (标记,乱搞)

    题干: Companies always have a lot of equipment, furniture and other things. All of them should be trac ...

  4. 【CodeForces - 349A】Cinema Line (贪心(其实不是贪心),乱搞)

    题干: The new "Die Hard" movie has just been released! There are n people at the cinema box ...

  5. codeforces 664B B. Rebus(乱搞题)

    题目链接: B. Rebus time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  6. AcWing 397. 逃不掉的路(边双连通分量缩点成树 + 树链剖分乱搞)

    整理的算法模板合集: ACM模板 我们知道在同一个边双连通分量中的点没有必经边(因为至少有两条分离的路径). 所以我们直接tarjan求出桥后缩点,然后求一下树上两点间的距离即可. 那么如何求树上两点 ...

  7. bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞

    没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...

  8. BZOJ-1800 飞行棋 数学+乱搞

    这道题感觉就是乱搞,O(n^4)都毫无问题 1800: [Ahoi2009]fly 飞行棋 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1172 So ...

  9. 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞

    3578: GTY的人类基因组计划2 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 367  Solved: 159 [Submit][Status ...

最新文章

  1. HIVE QL 杂记
  2. Zookeeper的功能以及工作原理
  3. OC Swift混编-Swift.h File not found
  4. 计算机基础 在线测试,计算机基础知识在线测试答案.doc
  5. 860. 柠檬水找零 golang
  6. asp.net MVC留言本示例
  7. Codechef QGRID
  8. 【KSZ8863】KSZ8863交换机芯片的信息汇总与打板验证结果
  9. tp1900芯片对比7621a_MT7621A和MT7620A两个芯片各有什么特点?
  10. C++编程导出XVID编码的AVI视频
  11. 华为获颁中国首个5G基站设备进网许可证:可支持中国规模部署;IBM推出新一代企业平台Z15;Testin最新AI产品发布……...
  12. ReactNative之 Activity class {xxx/xxx.MainActivity} does not exist
  13. FatFs(通用FAT文件系统模块)下载与介绍
  14. 计算机组成原理框架结构图
  15. python格式规范的要求_Python书写规范
  16. springboot2.0整合redis报错
  17. bool型函数定义及应用
  18. html5考试总结300字,中段考试总结作文300精选集锦
  19. JavaScript数据类型基本数据类型与引用数据类型的区别
  20. Tracert命令 路由跟踪数据包解析

热门文章

  1. springboot日志处理
  2. 多对多(many-to-many)
  3. MySQL sql99语法—非等值连接
  4. MySQL高级or索引失效情况
  5. Nginx中添加gzip_static支持
  6. Redis中的可用性保证之Sentinel 原理
  7. 多值参数-定义及作用
  8. 函数基本使用-函数的定义以及调用执行线路图
  9. Spring Cloud异常
  10. java重置_JAVA復制數組和重置數組大小