HDU 1716 排列2 (格式问题+排列)

题意:。

析:我们完全可以STL里面的函数next_permutation(),然后方便,又简单,这个题坑就是在格式上。

行末不能有空格,结尾不能有空行,不大好控制,必须控制好第一次数。

这个题本应该用DFS的,去枚举,也挺简单的,在这就不说了。

代码如下:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <map>
#include <cctype>

using namespace std;
const int maxn = 1000 + 5;
int a[5];

int main(){
//    freopen("in.txt", "r", stdin);
    int kase = 0;
    while(true){
        int sum = 0;
        for(int i = 0; i < 4; ++i){
            scanf("%d", &a[i]);
            sum += a[i];
        }
        if(!sum)  break;
        if(kase)  printf("\n");
        sort(a, a+4);

        int t = -1;
        bool ok = false;
        do{
            if(!a[0])  continue;

            if(a[0] != t){
                t = a[0];
                if(ok)  printf("\n");
                ok = true;
            }
            else  printf(" ");

            for(int i = 0; i < 4; ++i)
                printf("%d", a[i]);
        }while(next_permutation(a, a+4));

        printf("\n");
        ++kase;
    }
    return 0;
}
时间: 2024-08-10 17:19:40

HDU 1716 排列2 (格式问题+排列)的相关文章

hdu 4497 GCD and LCM(排列组合)

题目:hdu 4497 GCD and LCM 题目大意:给出三个数的最大公约数,和最小公倍数,问这三个数的排列组合关系. 解题思路:最小公倍数/最大公约数 ==  三个数不同部分的乘积.这样来考虑的话,三个数都要有最大公约数的部分,其余的部分就是由LCM / GCD 里面的因子构成.这里面的因子可能会有 2 2 3 这样的情况, 不同的因子之间是不会相互干扰的,但是相同的会出现问题,因为,不能同时将相同的因子都放在三个位置上,这样最大公约数就的要乘上这个因子.然后对于单种因子来考虑的话,每种因

hdu 2200 Eddy&#39;s AC难题 (排列组合 就是求(a+b)的n次方的展开式)

Eddy's AC难题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3770    Accepted Submission(s): 1765 Problem Description Eddy是个ACMer,他不仅喜欢做ACM题,而且对于Ranklist中每个人的ac数量也有一定的研究,他在无聊时经常在纸上把Ranklist上每个人的

hdu 1716 排列2(stl next_permutation)

http://acm.hdu.edu.cn/showproblem.php?pid=1716 考到题目直接套 next_permutation 没有注意到0不能为首位 结果wa了一整天 输出结构也略有些小坑 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> using namespace std; int num[10

HDU 4043 FXTZ II (组合数学-排列组合)

FXTZ II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 498    Accepted Submission(s): 266 Problem Description Cirno is playing a fighting game called "FXTZ" with Sanae. Sanae is a ChuShou

HDU 2068 RPG的错排(排列组合,错排)非常详细~

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2068 这道题需要用到错排公式以及高中数学排列组合的知识. 排列组合:[1]排列(从n中拿出m个,并进行排列):A_n_m=n!/(n-m)!=n*(n-1)*(n-2)*........(n-m+1); [2]组合(从n中拿出m个,不进行排列):C_n_m=n!/((n-m)!*m!)=n*(n-1)*(n-2)*........(n-m+1)/(m*(m-1)*.......1); 因此不难得出排

HDU ACM 4465 Candy-&gt;概率-数学期望-排列组合

题意:有两个箱子,里面各放有糖n个,每天从两个之中任取一颗糖,突然有一天小孩取糖时发现一个盒子里空了,问另一个盒子里面现在有多少糖(求期望值)? #include<iostream> #include<cmath> using namespace std; double F[400008]; double C_N_M(int n,int m) { return F[n]-F[m]-F[n-m]; } void Init() { int i; F[0]=0; for(i=1;i<

HDU ACM 2554 N对数的排列问题

题意:有n对数,大小分别为1.2.3.....n.问是否存在这个样的排列,两个1之间有1个数,两个2之间有2个数,两个3之间有3个数,......,两个n之间有n个数, 另外数的次序可以随意. 解法: 1.设k(k=1,2,..,n)放置的第一个位置为ak,第二个位置为bk.则有bk-ak=k+1(ak<bk),则有sum(bk-ak)=2+3+4+...+(n+1)=(1+2+3+...+n)+(1+1+...+1)=n*(n+3)/2. 2.又由于要有2*n个位置来放置这2*n个数.所以su

HDU 1996 汉诺塔VI (排列组合)

题意:... 析:每次都是有三种放法,1,2,3,根柱子,所以就是3^n次方. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <iostream> #include <cstring&

hdu 1716(dfs)

题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1716 排列2 Problem Description Ray又对数字的列产生了兴趣:现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束. Output 对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行,同一行中每个四位数