next_permutation 和 一个不成功的案例
一个失败的案例:(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)
样例输入
样例输出
#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 和 一个不成功的案例的更多相关文章
- 通过一个生活中的案例场景,揭开并发包底层AQS的神秘面纱
本文导读 生活中案例场景介绍 联想到 AQS 到底是什么 AQS 的设计初衷 揭秘 AQS 底层实现 最后的总结 当你在学习某一个技能的时候,是否曾有过这样的感觉,就是同一个技能点学完了之后,过了一段 ...
- SpringBoot系列之三_一个完整的MVC案例
这一节让我们来做一个完整的案例. 我们将使用MyBatis作为ORM框架,并以非常简单的方式来使用MyBatis,完成一个完整的MVC案例. 此案例承接上一节,请先搭建好上一节案例. 一.数据库准备 ...
- SQL Server一个特殊的阻塞案例分析2
最近发现一个非常奇怪的阻塞问题,如下截图所示(来自监控工具DPA),会话583被会话1036阻塞,而且阻塞发生在tempdb,被阻塞的SQL如下截图所示,会话等待类型为LCK_M_S 因为DPA工具不 ...
- Java事务处理全解析(四)—— 成功的案例(自己实现一个线程安全的TransactionManager)
在本系列的上一篇文章中我们讲到,要实现在同一个事务中使用相同的Connection对象,我们可以通过传递Connection对象的方式达到共享的目的,但是这种做法是丑陋的.在本篇文章中,我们将引入另外 ...
- PHP写一段代码,确保多个进程同时写入一个文件成功
这个需求是在软件设计过程常见的加锁.学计算机的同学都应该知道,这个是在<计算机操作系统>课程上有这个知识点.主要要考虑的是进程的同步,也就是进程对资源的互斥访问.OK,用程序说话吧! &l ...
- 一个小时成功安装SQL Server 2012图解教程
在安装微软最新数据库SQL Server 2012之前,编者先确定一下安装环境:Windonws 7 SP1,32位操作系统.CPU是2.1GHz赛扬双核T3500,内存2.93GB. 安装SQL S ...
- Java基础知识强化46:StringBuffer类之判断一个字符串是否对称案例
1. 分析:判断一个字符串是否是一个对称的字符串,我们只需要把字符串的第1个字符和最后1个字符,第2个字符和倒数第2个字符,…… 比较的次数是长度除以2. 方法1:通过取取索引对应值来进行一一比对 ...
- 记录一次raid数据恢复及回迁成功的案例
故障发生在两块盘组成的一个raid0上,其中的一块盘亮黄灯,被raid卡踢出后,raid崩溃,下面就把当时抢救数据的整个过程进行介绍. 由于硬盘是两块SAS 300G的硬盘,先把硬盘从机器中拔出来,然 ...
- 使用session和cookie实现用户登录:一个登录页面,一个servlet,一个登录成功页面
文件目录 1.登录页面 <%@ page language="java" contentType="text/html; charset=utf-8" p ...
随机推荐
- Javascript基础系列之(五)关键字和保留字 (keyword)
关键字不可以作为变量名或者函数名 break case catch continue default delete do else finally for function if in instanc ...
- css知识点补充、css属性、
1.媒体查询的css代码的优先级要比其他的高! 2.text-overflow: 定义文本溢出父级元素如何处理! clip/ellipsis/string 3.overflow: visible ...
- 关于MyEclipse对Struts2配置文件较检异常 Invalid result location value/parameter
有时候Struts.xml配置没有错误,完全可以顺利运行,而MyEclipse9以上版本却经常出现一大坨错误标识,错误信息是 Invalid result location value/paramet ...
- @SuppressWarnings含义
J2SE 提供的最后一个批注是 @SuppressWarnings.该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默. @SuppressWarnings 批注允许您选择 ...
- BZOJ-1877 晨跑 最小费用最大流+拆点
其实我是不想做这种水题的QWQ,没办法,剧情需要 1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 1704 Solve ...
- codeforces 719A:Vitya in the Countryside
Description Every summer Vitya comes to visit his grandmother in the countryside. This summer, he go ...
- COGS8 备用交换机
备用交换机 ★★ 输入文件:gd.in 输出文件:gd.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] n个城市之间有通讯网络,每个城市都有通讯交换机,直接或间 ...
- Redis Installation、Configuration、Program Based On Redis Learning
目录 . Redis 简介 . Redis安装配置 . 编程使用Redis . 使用Lua脚本 1. Redis 简介 0x1: Redis是什么 Redis是一款Nosql类型的基于key-valu ...
- TCP/IP详解 学习六
从ip层看路由表 选路策略 选路策略:决定把哪些路由放到路由表的规则. Ip执行选路机制,而路由守护程序则提供选路策略. Netstat –rn 打印路由表,如果没有-n命令会搜索配置文件,将网络地 ...
- java分页
package entity; public class Page { //记录当前页的状态信息 private int num; //当前页号,采用自然数计数 1,2,3,... private i ...