某种密码(password.*)

关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY。若KEY=∑?〖Ai*Bi〗,则密文就是原文的一组合法密码。现在有原文和钥匙码,请编一个程序来帮助他统计到底有多少个符合条件的密文。

【输入数据】

第一行两个数N,KEY,意义同题目描述;

第二行N个数表示原文A,意义同题目描述。

【输出数据】

一个数ANS,表示对于原文A和KEY,有多少组可行的密文B。

【输入样例】

3 2

1 1 2

【输出样例】

2

【样例说明】

密文110,1*1+1*1+0*2=2

密文001,0*1+0*1+1*2=2

一共两组可行的密文。

【数据约定】

60%数据满足N<=25

100%数据满足N<=40,-maxlongint<=∑?Ai<=maxlongint

/*
  直接暴力加剪枝60分,没想到可以先跑一半的暴力,然后用hash统计一下,再跑另一半。
*/
#include<cstdio>
#include<iostream>
#include<map>
#define M 45
#define ll long long
using namespace std;
ll a[M],s1[M],s2[M],n,key,ans;
map<ll,int> hash;
void dfs(int x,int sum,int flag)
{
    if(!flag&&x>n/2)
    {
        hash[sum]++;
        return;
    }
    if(flag&&x>n)
    {
        ans+=hash[key-sum];
        return;
    }
    dfs(x+1,sum+a[x],flag);
    dfs(x+1,sum,flag);
}
int main()
{
    //freopen("jh.in","r",stdin);
    freopen("password.in","r",stdin);
    freopen("password.out","w",stdout);
    cin>>n>>key;
    for(int i=1;i<=n;i++)
      cin>>a[i];
    dfs(1,0,0);
    dfs(n/2+1,0,1);
    cout<<ans;
    return 0;
}

时间: 2024-11-08 10:19:57

某种密码(password.*)的相关文章

某种密码

[题目描述] 某种密码的原文A由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY.若KEY=∑?[Ai*Bi],则密文就是原文的一组合法密码. 现有原文A和钥匙码KEY,询问有多少组可行的密文B. [输入描述] 第一行输入两个数N.KEY: 第二行输入N个数,表示原文A. [输出描述] 输出一个数,表示对于原文A和钥匙码KEY,有多少组可行的密文B. [输入样例] 3 2 1 1 2 [输出样例] 2 [数据范围及提示] 密文B为{1,1,0},1*1+1*1

9.30 noip模拟试题

时限均为1s,内存 256MB 1.某种密码(password.*) 关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY.若KEY=∑?[Ai*Bi],则密文就是原文的一组合法密码. 现在有原文和钥匙码,请编一个程序来帮助他统计到底有多少个符合条件的密文. [输入数据] 第一行两个数N,KEY,意义同题目描述: 第二行N个数表示原文A,意义同题目描述. [输出数据] 一个数ANS,表示对于原文A和KEY,有多少组可行的

2014-10-4 NOIP模拟赛

1.某种密码(password.*) 关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY.若KEY=∑?[Ai*Bi],则密文就是原文的一组合法密码. 现在有原文和钥匙码,请编一个程序来帮助他统计到底有多少个符合条件的密文. [输入数据] 第一行两个数N,KEY,意义同题目描述: 第二行N个数表示原文A,意义同题目描述. [输出数据] 一个数ANS,表示对于原文A和KEY,有多少组可行的密文B. [输入样例] 3 2

在win8.1上搭建OpenVPN服务器四(纯用户名密码user/password认证)

由于证书这个事情在ios系统的客户端上实现比较困难,这里在windows上实现了用户名密码user/password认证. 认证代码参考了checkpsw.sh,这里写了简单的批处理checkpsw.bat,开始以为是通过脚本传参数,后来发现传的是环境变量-_-||| ::checkpsw.bat,作者高山流水, ::参考checkpsw.sh (C) 2004 Mathias Sundman <[email protected]>的逻辑编写 @echo off ::设置配置文件路径,日志文件

(笔记)Mysql命令mysqladmin:修改用户密码

mysqladmin命令用于修改用户密码. mysqladmin命令格式:mysqladmin -u 用户名 -p 旧密码 password 新密码 1) 给root加个密码ab12首先在DOS下进入目录mysql\bin,然后键入以下命令:    mysqladmin -u root -password ab12注:因为开始时root没有密码,所以-p 旧密码一项就可以省略了. 2) 再将root的密码改为djg345    mysqladmin -u root -p ab12 passwor

Windows如何修改MySQL用户root密码

转:http://jingyan.baidu.com/article/495ba841ef412d38b30edeb2.html MySQL 是一个关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一.搭配 PHP 和 Apache 可组成良好的开发环境.因此用的很广泛.很多人都会遇到MySQL需要修改密码的情况,比如密码太简单.忘记密码等等.这里我就教大家几

mysql密码设置及重置方法

mysql密码设置及重置方法 作者 :小刘 今天这篇文章,我们来看下mysql数据库的密码设置,当我们不小心忘记了root密码,是一件很糟糕的事情,希望此文章可以帮助大家,我们先从设置密码开始吧!我们刚安装好的mysql数据库,默认root的密码为空,这时我们可以用一下命令设置密码mysqladmin -u root password "密码"如图(为root设置密码为123456)  如果你知道原来的旧密码,我们就可以用下面的命令直接更改就可以了mysqladmin -u root

修改MySQL数据库的密码

通过MySQL命令行,可以修改MySQL数据库的密码,下面就为您详细介绍该MySQL命令行,如果您感兴趣的话,不妨一看. 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1.给root加个密码ab12.首先在DOS下进入目录mysql\bin,然后键入以下命令mysqladmin -u root -password ab12注:因为开始时root没有密码,所以-p旧密码一项就可以省略了. 2.再将root的密码改为djg345.mysqladmin -u root

shiro real的理解,密码匹配等

1 .定义实体及关系 即用户-角色之间是多对多关系,角色-权限之间是多对多关系:且用户和权限之间通过角色建立关系:在系统中验证时通过权限验证,角色只是权限集合,即所谓的显示角色:其实权限应该对应到资源(如菜单.URL.页面按钮.Java方法等)中,即应该将权限字符串存储到资源实体中,但是目前为了简单化,直接提取一个权限表,[综合示例]部分会使用完整的表结构. 用户实体包括:编号(id).用户名(username).密码(password).盐(salt).是否锁定(locked):是否锁定用于封