一个失败的案例:(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 ...
随机推荐
-
相识HTML5 canvas
Canvas是HTML的API,我们可以用它在网页中实时的来生成图像. 文章导读 1.必备技能 2.用于画图的函数 例子: -会话气泡- -心形- -钟表- -星球里的星星- - ...
-
《数据结构与算法分析》学习笔记(三)——链表ADT
今天简单学习了下链表,待后续,会附上一些简单经典的题目的解析作为学习的巩固 首先要了解链表,链表其实就是由一个个结点构成的,然后每一个结点含有一个数据域和一个指针域,数据域用来存放数据,而指针域则用来 ...
-
python日志模块logging
python日志模块logging 1. 基础用法 python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.INFO.WARNING.ERROR.CRITICAL五种( ...
-
安卓---app自动更新
主要参考:http://blog.csdn.net/jdsjlzx/article/details/46356013/ 效果如下: 大致思路:[原文] 首先,我们要有一个可以被手机访问的后台. 这里有 ...
-
团队作业4——第一次项目冲刺(Alpha版本)4.22
团队作业4--第一次项目冲刺(Alpha版本) Day one: 会议照片 由于团队中的组员今天不在学校,所以我们的站立会议提前一天展开. 项目进展 由于今天是Alpha版本项目冲刺的第一天,所以没有 ...
-
配置SQL Server on Linux(2)
1. 前言 前一篇配置SQL Server on Linux(1),地址:http://www.cnblogs.com/fishparadise/p/8125203.html ,是关于更改数据库排序规 ...
-
内存管理——linux内核学习
买了<深入Linux内核架构>这本书准备了解一下linux内核机制.但是最开始看了十几页感觉看着很累,本来都准备弃了 过了段时间看见一个面经有linux内核的内容,于是就照着那个先把内存管 ...
-
http支付导图流程
第三方提交数据到官方的URL(加带参数)---官方服务器处理完成---跳转到第三方URL(加带参数)---第三处理---结束
-
Please ensure that adb is correctly located at 。。。。。。。。。。。。
遇到问题描述: 运行Android程序控制台输出 [2012-07-18 16:18:26 - ] The connection to adb is down, and a severe error ...
-
.NET开源免费的功能强大控件库
通信工具IM控件: http://www.cnblogs.com/hubro/p/4316315.html 360安全卫士及QQ部分控件经典皮肤下载 http://www.sufeinet.com/t ...