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 & ...
随机推荐
- 查看IP以及连接数
AWK: time awk 'BEGIN{while("netstat -an"|getline){if( $5 ~ /[1-255]/){split($5,t1,":& ...
- mysql-8.0.11-winx64 免安装版配置方法
mysql-8.0.11-winx64.zip 下载地址:https://dev.mysql.com/downloads/file/?id=476233 mysql-8.0.11-winx64.zi ...
- zabbix报警Too many processes on zabbix server
zabbix大量报警,运行进程过多,但实际有部分机器可以忽略,需要关闭相关的报警 Configuration-->Templates找到Template_Linux点该行的 Triggers选择 ...
- IntelliJ IDEA 中安装junit插件
1.在Intellij IDEA 中安装了 Junit,TestNG插件,首先检查一下intellij IDEA 是否在安装时默认安装了这两个插件,检查方法 打开 settings -->Plu ...
- jexus配置支持Owin
vi打开配置文件,加一行 OwinMain=xxx.dll ###################### # Web Site: Default ########################### ...
- LOJ 10155 - 「一本通 5.2 例 3」数字转换
前言 从现在开始,这个博客要写一些题解了.起初,开这个博客只是好玩一样,没事就写写CSS.JS,然后把博客前端搞成了现在这个样子.以前博客只是偶尔记录一些东西,刷题也从来不记录,最近受一些学长的影响, ...
- 【LOJ】#2071. 「JSOI2016」最佳团体
题解 01分数规划,二分加树背包-- 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putch ...
- 最受欢迎编程语言又是谁?C语言居首,大数据赢了
C语言占据榜首,但大数据类是最大赢家. IEEE Spectrum的第三次“最受欢迎编程语言”交互式排行榜新鲜出炉.因为不可能顾及到每一个程序员的想法,Spectrum使用多样化.可交互的的指标权重来 ...
- Windows下安装Tensorflow(python3.6):记录过程
安装前的情况: 之前使用的都是python2.7,但是tensorflow不支持2.x版本,那只有基于在3.x版本进行安装了 前段时间,我安装VS2017的时候安装了python3.6于是想在此基础上 ...
- PAT 1066. Root of AVL Tree (25)
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...