hdu1716排列2(stl:next_permutation+优先队列)
排列2
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5437 Accepted Submission(s): 2072
现有四张卡片,用这四张卡片能排列出非常多不同的4位数,要求按从小到大的顺序输出这些4位数。
每组输出数据间空一行。最后一组数据后面没有空行。
1 2 3 4 1 1 2 3 0 1 2 3 0 0 0 0
1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321 1123 1132 1213 1231 1312 1321 2113 2131 2311 3112 3121 3211 1023 1032 1203 1230 1302 1320 2013 2031 2103 2130 2301 2310 3012 3021 3102 3120 3201 3210
还有比这道题格式更牛的吗?我都吐血了。
。。
PE了7 8 次。。最后试一试的态度 居然AC了。。
放一张输出的图片吧
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
感觉看了输出就懂的了这道题的格式。
全排+优先队列:
- #include <stdio.h>
- #include <queue>
- #include <algorithm>
- using namespace std;
- int main()
- {
- int a[4];
- priority_queue<int,vector<int>,greater<int> >s;//优先队列。greater换成less就是先出大的
- for(int i=0;i<4;i++)
- scanf("%d",&a[i]);
- while(1)
- {
- if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[0]==0)
- break;
- do
- {
- int sum=0;
- for(int i=3;i>=0;i--)
- sum=sum*10+a[i];
- if(sum>1000)
- s.push(sum);
- }while(next_permutation(a,a+4));//全排公式
- for(int i=1;i<=9;i++)
- {
- if(s.top()/1000==i)
- {
- printf("%d",s.top()),s.pop();
- while(s.top()/1000==i&&!s.empty())
- {
- printf(" %d",s.top());
- s.pop();
- }
- printf("\n");
- }
- }
- for(int i=0;i<4;i++)//
- scanf("%d",&a[i]);//
- if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[0]==0)//
- break;//
- else//
- printf("\n");//这么多 我不过为了格式。
- 。这道题 多么恶心。。
- }
- return 0;
- }
四个for循环做的:
- #include<stdio.h>
- #include <string.h>
- #include <algorithm>
- using namespace std;
- int main()
- {
- int a[4],q,stamp[30];
- scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]);
- while(1)
- {
- if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[1]==0)
- break;
- memset(stamp,0,sizeof(stamp));
- q=0;
- for(int i=0;i<4;i++)
- for(int j=0;j<4;j++)
- for(int k=0;k<4;k++)
- for(int t=0;t<4;t++)
- {
- if(i!=j&&i!=k&&i!=t&&j!=k&&j!=t&&k!=t&&a[i]>0)
- stamp[q++]=a[i]*1000+a[j]*100+a[k]*10+a[t];
- }
- sort(stamp,stamp+q);
- for(int i=1;i<=9;i++)
- {
- for(int j=0;j<q;j++)
- {
- if(stamp[j]!=stamp[j+1]&&stamp[j]/1000==i)
- {
- printf("%d",stamp[j]),j++;
- while(stamp[j]/1000==i)
- {
- while(stamp[j]==stamp[j+1])
- j++;
- printf(" %d",stamp[j]);
- j++;
- }
- printf("\n");
- }
- }
- }
- scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]);
- if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]&&a[1]==0)
- break;
- else
- printf("\n");
- }
- return 0;
- }
还有个搜索能够做。请小伙伴们自己做吧~
hdu1716排列2(stl:next_permutation+优先队列)的更多相关文章
- POJ 1833 排列【STL/next_permutation】
题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 ...
- 打印全排列和stl::next_permutation
打印全排列是个有点挑战的编程问题.STL提供了stl::next_permutation完美的攻克了这个问题. 可是,假设不看stl::next_permutation,尝试自己解决,怎么做? 非常自 ...
- STL之优先队列
STL 中优先队列的使用方法(priority_queu) 基本操作: empty() 如果队列为空返回真 pop() 删除对顶元素 push() 加入一个元素 size() 返回优先队列中拥有的元素 ...
- suseoj 1208: 排列问题 (STL, next_permutation(A.begin(), A.end()))
1208: 排列问题 时间限制: 1 Sec 内存限制: 128 MB提交: 2 解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 全排列的生成就是对于给定的字符集或 ...
- C++ STL next_permutation(快速排列组合)
排列组合必备!! https://blog.csdn.net/bengshakalakaka/article/details/78515480
- STL next_permutation 算法原理和自行实现
目标 STL中的next_permutation 函数和 prev_permutation 两个函数提供了对于一个特定排列P,求出其后一个排列P+1和前一个排列P-1的功能. 这里我们以next_pe ...
- STL next_permutation 算法原理和实现
转载自:https://www.cnblogs.com/luruiyuan/p/5914909.html 目标 STL中的next_permutation 函数和 prev_permutation 两 ...
- 【STL】优先队列priority_queue详解+OpenJudge-4980拯救行动
一.关于优先队列 队列(queue)这种东西广大OIer应该都不陌生,或者说,队列都不会你还学个卵啊(╯‵□′)╯︵┻━┻咳咳,通俗讲,队列是一种只允许从前端(队头)删除元素.从后端(队尾)插入元素的 ...
- STL next_permutation和prev_permutation函数
利用next_permutation实现全排列升序输出,从尾到头找到第一个可以交换的位置, 直接求到第一个不按升序排列的序列. #include <iostream> #include & ...
随机推荐
- 微信小程序实现首页图片多种排版布局!
先来个效果图: 使用技术主要是flex布局,绝对定位布局,小程序前端页面开发,以及一些样式! 直接贴代码,都有详细注释,熟悉一下,方便以后小程序开发! wxml: <view class='in ...
- 【Windows编程】大量病毒分析报告辅助工具编写
解决重复劳动 是否在分析单个病毒时很爽,分析N个病毒写报告很机械的情况.. 1)样本下载多个文件,这些文件写报告时要加上这些文件的MD5 2)写报告时明明是17个MD5,实际样本有18个的情况.不知道 ...
- linux系统下安装nginx
1.第一步:获取nginx的安装包 wget http://nginx.org/download/nginx-1.7.8.tar.gz 2.解压安装包tar -xvf nginx-1.7.8.tar. ...
- Python的CGI编程实现-通过接口运行服务器py脚本
yum 安装apcche [apache]yum 安装Apache(Centos 6.9) https://www.cnblogs.com/lauren1003/p/5993654.html只需一行命 ...
- Java中包的介绍
包的介绍: 未命名包 命名包 可以避免类名重复 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2. ...
- Java基础88 数据库设计的三大范式
数据库的设计原则:建议设计的表尽量遵守三大范式 1.第一范式 要求表的每个字段必须是不可分割的独立单元 Student表: name -- 违反了第一范式 张 ...
- aria2
在之前我们已经介绍了通过uGet使用aria2来进行下载,但是这样只是使用aria2最简单的功能,现在我们来介绍一下aria2的常用命令 简单篇: 一般使用使用 aria2 下载文件,只需在命令后附加 ...
- **CI中的order_by在get_where之前
public function show_list_by_order($array_data, $order_field, $order_mode) { $query = $this->db-& ...
- yum list失败
搭建了本地yum源,用yum list 测试报如下错误: [root@heguol ~]# yum list error: rpmdb: BDB0113 Thread/process ye67ww ...
- 【BZOJ】4025: 二分图
题解 lct维护一个结束时间作为边权的最大生成树,每次出现奇环就找其中权值最小的那条边,删掉的同时还要把它标记上,直到这条边消失 如果有标记则输出No 边权通过建立虚点来维护 代码 #include ...