对于含有重复元素序列的全排列,为了再次排列后得到的序列中各不重复,需要用到c++中的do{}while(next_permutation(a,a+n))函数
对于判断每次排序后的序列是否符合条件,用到了构造方法,见代码

bool pan(int x,int y){bool sheng=false;bool jiang=false;for(int i=x+1;i<=y;i++){if(a[i]>a[i-1]) sheng=true;else if(a[i]<a[i-1]) jiang=true;}if(sheng&&jiang) return false;else if((sheng&&!jiang)||(!sheng&&jiang)||(!sheng&&!jiang)) return true;
}

先假设序列既不上升又不下降,满足一个或多个含一种数字的序列(符合条件),如果序列中没有下降子序列,或者序列中没有上升子序列(符合条件)
完整代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int ans=0;
int a[10]={2, 3, 3, 3, 5, 6, 6, 7, 7, 8};
bool pan(int x,int y){bool sheng=false;bool jiang=false;for(int i=x+1;i<=y;i++){if(a[i]>a[i-1]) sheng=true;else if(a[i]<a[i-1]) jiang=true;}if(sheng&&jiang) return false;else if((sheng&&!jiang)||(!sheng&&jiang)||(!sheng&&!jiang)) return true;
}
bool check(){for(int i=0;i<8;i++){for(int j=i+1;j<9;j++){if(pan(0,i)&&pan(i+1,j)&&pan(j+1,9)){return true;}}}return false;
}
int main(){do{if(check()) ans++;}while(next_permutation(a,a+10));cout<<ans;
}

全排列递归

#include<bits/stdc++.h>
using namespace std;
#define ll long long
void swap(int a[],int i,int j){int temp;temp=a[i];a[i]=a[j];a[j]=temp;
}
void printa(int a[],int n){for(int i=0;i<n;i++){cout<<a[i]<<" ";}
}
void qpl(int a[],int p,int q){if(q==p){printa(a,q+1);cout<<endl;}for(int i=p;i<=q;i++){swap(a,p,i);qpl(a,p+1,q);swap(a,p,i);}}
int main(){int a[3]={1,2,3};qpl(a,0,2);}

“九韶杯”河科院 D.数列重组(含重复元素的全排列+构造方法)相关推荐

  1. “九韶杯”河科院程序设计协会第一届程序设计竞赛 【前六题解析】

    https://ac.nowcoder.com/acm/contest/13493#rank 目录 A: 6的个数 B: 小明的作业 C: 斐波那契 D: 数列重组 E: 三角形个数 F: 字符串 A ...

  2. “九韶杯”河科院程序设计协会第一届程序设计竞赛题解

    A-6的个数 题意 ​ 2021中,出现了多少个数字6 思路 ​ for循环枚举对于每个数分解之后贡献答案就可以了 代码 #include <bits/stdc++.h> using na ...

  3. “九韶杯”河科院程序设计协会第一届程序设计竞赛 部分题解

    (大型翻车 A 602 #include<bits/stdc++.h> using namespace std; int main(){int sum=0;for(int i=6;i< ...

  4. 最大子矩阵和问题(“九韶杯” 最强对手矩阵、AW的西瓜田)

    最大子矩阵和问题就是在一个n*m的已知的全为数字的矩阵中,找到一个子矩阵,使这个矩阵各元素的和是所有子矩阵中最大的. 在我看来,这种类型的题分为两种类型: 1.固定了矩阵的长宽,求最大和: 2.没有固 ...

  5. 九章算法面试题54 带重复元素的全排列

    九章算法官网-原文网址 http://www.jiuzhang.com/problem/54/ 题目 给定一个带重复元素的整数集合,求出这个集合中所有元素的全排列.对于集合[1,1,2],其本质不同的 ...

  6. 科拉茨猜想,统计最终变成1所运算的次数,以及数列是否有重复

    科拉茨猜想(Collatz Conjecture)3N+1 问题 任取一个正整数,如果这个数是偶数,则除以二.如果是奇数,乘以3再加1.重复上述步骤,最后起始数都会变成1时停止.这就是著名的科拉茨猜想 ...

  7. 我的未来该何去何从?双非院校计科院学嵌入式的大四小菜鸡的自我反思...

    这篇文章其实挺早之前就想写的,而且当时就想好了两种心态来写.第一种是小有成就,拿到心满意足的offer来分享一下往昔踩过的坑:第二种就是庸庸碌碌,任重道远.很不幸现在的是第二种心态! 近来看到曾经的同 ...

  8. 北科院分子互作实战专题培训班(10月底/11月底班)(生物医药与营养健康协同创新中心)...

    北京市科学技术研究院 生物医药与营养健康协同创新中心 生命健康前沿培训基地 培训基地将以京津冀协同为战略契机,围绕国内外生物医药与营养健康领域的知识链.技术链与产业链的前沿培训与协同交流需求,组织高端 ...

  9. Gut:北京生科院赵方庆团队揭示人体口腔菌群的稳定性和动态变化规律

    人体口腔菌群的稳定性和动态变化规律 追踪体内人类口腔微生物组的积累,阐明了胃肠道入口的微生物群落动态变化 Tracing the accumulation of in vivo human oral ...

最新文章

  1. html loading原理,加载HTML-Loading HTML
  2. 饥荒海难机器人怎么用_饥荒:海难是一款野外生存游戏
  3. Premiere Pro CC2019安装资料及安装教程
  4. php is resource,PHP有没有is_type()函数?该如何解决 - is_resource
  5. Leetcode-转置矩阵(867)
  6. 联合利华搭上阿里云数据中台 精准营销新客提升2倍
  7. aspectj annotation- used in spring
  8. 惜缘-致家乡的一位女孩[原创]
  9. 微信支付php案例,小程序微信支付php案例
  10. 【Hadoop篇】--Hadoop常用命令总结
  11. 0x06 MySQL 单表查询
  12. a1 抛光等级spi_抛光等级对照表
  13. 论文Express | 把你的口哨变成莫扎特风,Facebook发布通用音乐迁移网络
  14. Zookeeper 和redis做分布式锁区别
  15. csol永恒python使用技巧大全_小甲鱼Python第028讲集合:因为懂你,所以永恒 | 课后测试题及参考答案...
  16. Mac电脑没声音了怎么办?
  17. 斗兽棋项目开发计划书
  18. 【Ubuntu升级报错】“the following signatures couldn’t be verified because the public key is not available”
  19. Wav ,flac,mp3,ogg 等的区别
  20. 为什么推荐使用hooks,它有什么好处?

热门文章

  1. 【RK3568调试记】给RK809添加音量调节功能
  2. dilation convolution
  3. web 网页登录 微信授权
  4. 安徽浮山2021高考成绩查询,安庆2021高考成绩查询入口
  5. 在Windows,Mac,Linux中快速安装配置Node.js环境,并安装VSCode, 完成Web端恒生交易日接口的图形化展示...
  6. linux tmpfs作用,Linux下tmpfs介绍与使用
  7. Java--Lambda表达式--使用/教程/实例
  8. Stylus中文网Stylus中文文档
  9. 算法面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
  10. 皮具封边发黑_皮革封边怎么能有黑线!?