题目描述

某地发行一套彩票。彩票上写有1到M这M个自然数。彩民可以在这M个数中任意选取N个不同的数打圈。每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同。

每次抽奖将抽出两个自然数X和Y。如果某人拿到的彩票上,所选N个自然数的倒数和,恰好等于X/Y,则他将获得一个纪念品。

已知抽奖结果X和Y。现在的问题是,必须准备多少纪念品,才能保证支付所有获奖者的奖品。

输入输出格式

输入格式:

输入文件有且仅有一行,就是用空格分开的四个整数N,M,X,Y。

输出格式:

输出文件有且仅有一行,即所需准备的纪念品数量。

1≤X, Y≤100,1≤N≤10,1≤M≤50。

输入数据保证输出结果不超过10^5。

输入输出样例

输入样例#1:

2 4 3 4

输出样例#1:

1

题解

本来是本着刷splay的心去刷这道题的,结果一看题目感觉是搜索,点开算法标签\(splay\)????

再点开讨论和题解(发现并没有人用splay做)看了一下应该是有人恶搞(人才.....)

回到这道题,首先直接爆搜肯定是不行的,题目所给的m有50,最坏时间复杂度应该有\(O((m-1)!)\).显然过不了,马上想到剪枝,这个剪枝应该还是比较容易想到的

  1. 如果当前结果\(tot\)>\(x/y\),返回
  2. 如果当前结果\(tot\)+后续能加的最大值<\(x/y\),返回
  3. 如果当前结果\(tot\)+后续能加的最小值>\(x/y\),返回
  4. 用个前缀和优化一下就可以了

就这三个最优性剪枝就已经能A掉这道题了,注意一下,数组比题目所给的50开大点,我也不知道为什么开60只有70分(T三个点),开70A了,开100又比开70快300ms

Code

#include<bits/stdc++.h>
#define in(i) (i=read())
using namespace std;
int read() {
int ans=0,f=1; char i=getchar();
while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();}
while(i>='0' && i<='9') {ans=(ans<<1)+(ans<<3)+i-'0'; i=getchar();}
return ans*f;
}
int n,m,x,y,ans;
double sta,eps=1e-10;
int vis[100];
double sum[100];
void dfs(int x,int last,double tot) {
if(tot-sta>eps) return;
if((tot+sum[last+n-x+1]-sum[last]+eps)<sta) return;
if((tot+sum[m]-sum[m-(n-x+1)])>sta+eps) return;
if(x==n+1) {
if(fabs(tot-sta)<=eps) ans++;
return;
}
for(int i=last+1;i<=m;i++) {
if(!vis[i]) {
vis[i]=1;
dfs(x+1,i,tot+1.0/(double)i);
vis[i]=0;
}
}
}
int main()
{
in(n); in(m); in(x); in(y);
for(int i=1;i<=m;i++) sum[i]=sum[i-1]+(1.0/(double)i);
sta=(double)x/(double)y;
dfs(1,0,0);
printf("%d\n",ans);
return 0;
}

博主蒟蒻,随意转载.但必须附上原文链接

http://www.cnblogs.com/real-l/

HNOI2002 彩票 [搜索]的更多相关文章

  1. [HNOI2002]彩票 (搜索+剪枝)

    题目描述 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同. 每次抽奖将抽出两个自然数X和Y.如果某人 ...

  2. BZOJ_1224_[HNOI2002]彩票_爆搜+打表

    BZOJ_1224_[HNOI2002]彩票_爆搜+打表 Description 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票, ...

  3. 洛谷——P2236 [HNOI2002]彩票

    P2236 [HNOI2002]彩票 给你$m$个数,从中挑$n$个数,使得这$n$个数的倒数之和恰好等于$\frac{x}{y}$ 常见的剪纸思路: 如果当前的倒数和加上最小可能的倒数和$>$ ...

  4. [HNOI2002]彩票

    题目描述 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同. 每次抽奖将抽出两个自然数X和Y.如果某人 ...

  5. BZOJ1224: [HNOI2002]彩票

    Description 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同.每次抽奖将抽出两个自然数X和 ...

  6. P2236 [HNOI2002]彩票

    题目描述 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同. 每次抽奖将抽出两个自然数X和Y.如果某人 ...

  7. 洛谷P2236 HNOI2002 彩票 [暴搜]

    题目传送门 彩票 分析: 虽然题目标签上标的是Splay,但我一个蒟蒻至今也沒掌握平衡树,所以就索性一个暴搜,加一点剪枝就水过去了- 代码: #include<cstdio> #inclu ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. 【P2236】彩票(搜索+剪枝)

    想说这个题要是想做出来就必须不干一件事情,那就是不要点开标签..点开标签看到那些平衡树什么的.... 首先,我们要理解这个题的题意.买彩票是什么大家都应该知道吧,一般来说,就是从很多数里面选出来几个, ...

随机推荐

  1. 爬虫之request模块高级

    一.cookie&session cookie:服务器端使用cookie来记录客户端的状态信息 实现流程: 执行登陆操作(获取cookie) 在发起个人主页请求时,需要将cookie携带到该请 ...

  2. Java学习笔记十一:Java中的方法

    Java中的方法 一:什么是方法: 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 学过C语言或者其他语言的应该都知道函数这个东西,在Java中,其实方法就是函数,只不过叫法不同,在 ...

  3. Leecode刷题之旅-C语言/python-67二进制求和

    /* * @lc app=leetcode.cn id=67 lang=c * * [67] 二进制求和 * * https://leetcode-cn.com/problems/add-binary ...

  4. HyperLedger Fabric 1.4 区块链开发平台(4.1)

    目前区块链开发平台分“公有链平台”和“联盟链系统”两类,“公有链平台”主要以以太坊为主的平台,可以在该类平台上进行代币的发行和根据各种模块搭建应用:“联盟链系统”主要以超级账本为主的开源系统,该类开源 ...

  5. SQL Server附加数据库拒绝访问错误解决方法

    今天在MsSQL里附加数据库时提示操作系统错误5(拒绝访问),这里我没给出了两个解决方案供大家解决问题. 方案一:切换登录方式 出现这种情况是由于用“混合验证方式”(SQL Server身份验证)登录 ...

  6. 对C语言连等式的学习

    例子如下 [pgsql@localhost soft]$ cat test1.c #include <stdlib.h> #include <stdio.h> int main ...

  7. 通过数据库恢复SharePoint网站

           SharePoint网站一般包含很多个数据库,最主要的有3个,分别是SharePoint_Admin_Content(管理中心数据库),SharePoint_Config(配置数据库)和 ...

  8. redis入门:介绍、特点、安装、各类型常用操作

    一.redis介绍 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. Redis支持多种类型的数据结构,如 字符串(strings), 散列(ha ...

  9. XPivot 用户手册及版本更新公示

    此文仅介绍XPivot的通用功能,如有对项目中定制的高级功能感兴趣的可留言讨论 XPivot当前版本v2.2 [2015-04-20发布] v2.1 下载链接: http://pan.baidu.co ...

  10. 多图片上传(base64方式传至后台)

    <!DOCTYPE html><html><head> <meta http-equiv="X-UA-Compatible" conten ...