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 & ...
随机推荐
- Explain EV in /proc/bus/input/devices data【转】
转自:https://unix.stackexchange.com/questions/74903/explain-ev-in-proc-bus-input-devices-data It repre ...
- CasperJS API介绍
一.使用标准JavaScript对象作为可选参数构造CasperJS实例 1 直接在create()函数里面使用 var casper = require('casper').create({ cli ...
- PHP URL中包含中文,查看时提示404
使用Microsoft Web Platform在IIS里配置安装一个wordpress,一切顺利. 当添加一片文章时,自动生成URL类似如下: http://localhost/wordpress/ ...
- 20175225《java程序设计》第五周学习总结
20175225 2018-2019-2 <Java程序设计>第5周学习总结 教材学习内容总结 1.接口体中包含常量的声明(没有变量)和抽象方法两部分.接口体中只有抽象方法,没有普通的方法 ...
- csu 1930 roads(DFS)
Description Once upon a time there was a strange kingdom, the kingdom had n cities which were connec ...
- final在类和方法中的使用
package final0; //final修饰的类不能继承//final修饰的方法不能继承public class TestFinal3 { public static void main(Str ...
- dojo 加载自定义module的路径问题
因为最近想学学ArcGIS API for JavaScript ,翻了下ESRI的官网guide,发现其是基于dojo框架的,看了两页实在看不懂,于是先来熟悉下dojo框架.人蠢不能怪社会%> ...
- JavaScript中变量的相互引用
http://www.jb51.net/article/23387.htm
- ModelDriven 和 Preparable 拦截器
Params 拦截器 Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueSta ...
- 002.SSH日常命令
一 远程登陆 ssh 用户名@远程主机ip:首次登陆需要下载对方公钥. 实例:ssh 192.168.10.129 二 远程复制 scp root@远程主机ip:[远程主机文件绝对路径] [需要保存的 ...