一个失败的案例:(POJ 1009)

题目描述

小翔同学的宿舍WIFI添加了密码,密码每天都会变更。而小翔每天都会给蹭网的同学们提供密码提示。现在请你根据密码提示,编写程序破译密码。 已知密码提示给出了n个整数 a1,a2,…,an,以及一个整数 t(t小于n)。从这n个整数中任选t个相加,可分别得到一系列的和。例如当 n=4,t=3,4 个整数分别为 3,7,12,19 时,可得全部组合的和分别为:

3+7+12=22  3+7+19=29  7+12+19=38  3+12+19=34。 而和为素数的个数即为小翔宿舍WIFI的密码。

例如上例,只有一种的和为素数:3+7+19=29,于是密码即为1。

输入

n , t (1<=n<=20,t<n) a1,a2,…,an (1<=ai<=5000000)

样例输入

4 3 3 7 12 19

样例输出

1
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<math.h> using namespace std;
long d[],*head;
int i,n,t,sum=,mark=,Q; int fun(int ns)
{
int j,m;
m=(int)sqrt(ns);
for(j=;j<=m;j++)
{
if(!(ns%j))
{return ;}
}
return ;
} int permutation()
{
if(Q<t){cout<<n<<Q<<t<<"$"; return mark;}
do
{
for(i=;i<t;i++)
{
sum=sum+d[i];
cout<<d[i]<<"*";
}
if(fun(sum)==)
{
mark++;
}
sum=;
}while(next_permutation(d,d+Q));
Q--;cout<<"!";
permutation();
} int main()
{
freopen("stdin.txt","r",stdin);
while(scanf("%d %d",&n,&t)!=EOF)
{
for(i=;i<n;i++)
{
scanf("%ld",&d[i]);
}
Q=n;
cout<<permutation()<<endl;
mark=n=t=;
}
return ; //相同时合并,缺少情况
}

next_permutation遇到同次相同序列会合并,用到这道题会出错,要注意用的条件,这道题用DFS即可,这道题撸了三天我也是醉了。

正解:

 #include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;
int i=,j,sum,num,n,t;
long int d[];
int fun(int n)
{
int m;
m=(int)sqrt(n);
for(j=;j<=m;j++)
{
if(!(n%j))
{return ;}
}
return ;
} void dfs(int abc,int i,int sum)
{
if(abc==t&&fun(sum))
{num++;return;}
for(int j=i;j<n;j++)
{dfs(abc+,j+,sum+d[j]);}
} int main()
{
while(scanf("%d%d",&n,&t)!=EOF)
{
for(int i=;i<n;i++)
scanf("%ld",&d[i]);
dfs(,,);
cout<<num<<endl;
num=sum=;
}
return ;
}
/**************************************************************
Problem: 1009
User: 2014217052
Language: C++
Result: 正确
Time:4 ms
Memory:1516 kb
****************************************************************/

几种常见用法:

#include<iostream>

#include<string.h>

#include<algorithm>

using namespace std;

int main()

{

char d[100];

cin>>d;

sort(d,d+strlen(d));

char *first=d;

char *last=d+strlen(d);

do{

cout<<d<<endl;

}while(next_permutation(first,last));

return 0;

}

////////////////////////////////////////////

#include<iostream>

#include<string.h>

#include<algorithm>

using namespace std;

int main()

{

char d[100];

cin>>d;

sort(d,d+strlen(d));

char *first=d;

char *last=d+strlen(d);

do{

cout<<d<<endl;

}while(next_permutation(first,last));

return 0;

}

//////////////////////////////////////////

#include<iostream>

#include<string.h>

#include<algorithm>

using namespace std;

int main() {

string dog;

while(cin>>dog&&dog!="@")

{

sort(dog.begin(),dog.end());

while(next_permutation(dog.begin(),dog.end()))

{

cout<<dog<<endl;

}

}

}

///////////////////////////////////////

next_permutation 和 一个不成功的案例的更多相关文章

  1. 通过一个生活中的案例场景,揭开并发包底层AQS的神秘面纱

    本文导读 生活中案例场景介绍 联想到 AQS 到底是什么 AQS 的设计初衷 揭秘 AQS 底层实现 最后的总结 当你在学习某一个技能的时候,是否曾有过这样的感觉,就是同一个技能点学完了之后,过了一段 ...

  2. SpringBoot系列之三_一个完整的MVC案例

    这一节让我们来做一个完整的案例. 我们将使用MyBatis作为ORM框架,并以非常简单的方式来使用MyBatis,完成一个完整的MVC案例. 此案例承接上一节,请先搭建好上一节案例. 一.数据库准备 ...

  3. SQL Server一个特殊的阻塞案例分析2

    最近发现一个非常奇怪的阻塞问题,如下截图所示(来自监控工具DPA),会话583被会话1036阻塞,而且阻塞发生在tempdb,被阻塞的SQL如下截图所示,会话等待类型为LCK_M_S 因为DPA工具不 ...

  4. Java事务处理全解析(四)—— 成功的案例(自己实现一个线程安全的TransactionManager)

    在本系列的上一篇文章中我们讲到,要实现在同一个事务中使用相同的Connection对象,我们可以通过传递Connection对象的方式达到共享的目的,但是这种做法是丑陋的.在本篇文章中,我们将引入另外 ...

  5. PHP写一段代码,确保多个进程同时写入一个文件成功

    这个需求是在软件设计过程常见的加锁.学计算机的同学都应该知道,这个是在<计算机操作系统>课程上有这个知识点.主要要考虑的是进程的同步,也就是进程对资源的互斥访问.OK,用程序说话吧! &l ...

  6. 一个小时成功安装SQL Server 2012图解教程

    在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统.CPU是2.1GHz赛扬双核T3500,内存2.93GB. 安装SQL S ...

  7. Java基础知识强化46:StringBuffer类之判断一个字符串是否对称案例

    1. 分析:判断一个字符串是否是一个对称的字符串,我们只需要把字符串的第1个字符和最后1个字符,第2个字符和倒数第2个字符,…… 比较的次数是长度除以2.  方法1:通过取取索引对应值来进行一一比对 ...

  8. 记录一次raid数据恢复及回迁成功的案例

    故障发生在两块盘组成的一个raid0上,其中的一块盘亮黄灯,被raid卡踢出后,raid崩溃,下面就把当时抢救数据的整个过程进行介绍. 由于硬盘是两块SAS 300G的硬盘,先把硬盘从机器中拔出来,然 ...

  9. 使用session和cookie实现用户登录:一个登录页面,一个servlet,一个登录成功页面

    文件目录 1.登录页面 <%@ page language="java" contentType="text/html; charset=utf-8" p ...

随机推荐

  1. 第二课:判断js变量的类型以及domReady的原理

    1.类型的判断: js五种简单数据类型有:null,undefined,boolean,number,string. 还有复杂的数据类型:Object,Function,RegExp,Date,自定义 ...

  2. DOM学习笔记(思维导图)

    导图

  3. 传智168期JavaEE就业班 day05-XML 约束与解析

    * 课程回顾: * DOM解析HTML简介 * DOM 文档对象模型 * 解析器 * document对象 * getElementById("id的值"); 返回一个元素(标签) ...

  4. JavaEE EL的一些用法

    EL 可以在指示元素中设置EL是否使用 isELIgnored="true" true是不使用 也可以在web.xml中使用 <jsp-config> <jsp- ...

  5. iOS边练边学--static(作用域),copy(深浅拷贝)

    一.static作用 二.copy

  6. Opentack常用技巧

    这篇博客将收集一些openstack里的使用技巧. 1. which dhcp agent is hosting the network?   2. 各个网桥port命令规则 grep for por ...

  7. 【转】高斯消元模板 by kuangbin

    写的很好,注释很详细,很全面. 原blog地址:http://www.cnblogs.com/kuangbin/archive/2012/09/01/2667044.html #include< ...

  8. Java算法-快速排序

    快速排序也是用归并方法实现的一个“分而治之”的排序算法,它的魅力之处在于它能在每次partition(排序算法的核心所在)都能为一个数组元素确定其排序最终正确位置(一次就定位准,下次循环就不考虑这个元 ...

  9. [Asp.net mvc] 在Asp.net mvc 中使用MiniProfiler

    MiniProfiler是Stack Overflow团队设计的一款性能分析的小程序.可以对一个页面本身,及该页面通过直接引用.Ajax.Iframe形式访问的其它页面进行监控,监控内容包括数据库内容 ...

  10. AppStore占坑注意事项

    AppStore占坑注意事项 我们会提前在AppStore(iTunesConnect)里注册一些应用名称,以满足未来业务需要和防止恶意注册,其中有一些需要注意的事情,整理如下: 倒计时180天 为了 ...