Codeforces 912 质因数折半 方格数学期望
A
B
#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll Mod = ;
set<int> need;
map<int, bool> mp[];
vector<int> ans;
int main()
{
ll n, k;
cin >> n >> k;
ll cnt = ;
for (ll i = ; i >= ; i--)
{
if ((1LL << i)&n)
{
cnt = i;
break;
}
}
if (k == )
{
cout << n << endl;
}
else
{
cout << (1LL << (cnt + )) - << endl;
}
return ;
}
D
每个点(i,j)在min(i,min(r,n-r+1))*min(j,min(r,m-r+1))个正方形内
这个点的贡献为number*在多少个正方形内/(n-r+1)/(m-r+1)
#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll Mod = ;
ll area;
ll chang, kuang;
ll n, m, r, k;
double anser = ;
map<ll, bool> mp[];
struct node
{
ll x, y, sum;
friend operator<(node a, node b)
{
return a.sum < b.sum;
}
};
priority_queue<node> que;
ll judge(int x, int y)
{
if (x == (n + ) / && (n & ) && y == (m + ) / && (m & ))
{
return ;
}
if ((x == (n + ) / && (n & )) || (y == (m + ) / && (m & )))
{
return ;
}
return ;
}
int main()
{
cin >> n >> m >> r >> k;
chang = min(r, n - r + ), kuang = min(r, m - r + );
area = (n - r + ) * (m - r + );
node cnt;
cnt.x = (n + ) / , cnt.y = (m + ) / , cnt.sum = min(cnt.x, chang) * min(cnt.y, kuang);
que.push(cnt);
while (!que.empty() && k)
{
node cur = que.top();
que.pop();
ll number = judge(cur.x, cur.y);
number = min(number, k);
k -= number;
anser += 1.0 * number * cur.sum / area;
node todo;
todo.x = cur.x - , todo.y = cur.y, todo.sum = min(todo.x, chang) * min(todo.y, kuang);
if (todo.x >= && todo.y >= && mp[todo.x][todo.y] == )
{
que.push(todo);
mp[todo.x][todo.y]++;
}
todo.x = cur.x, todo.y = cur.y - , todo.sum = min(todo.x, chang) * min(todo.y, kuang);
if (todo.x >= && todo.y >= && mp[todo.x][todo.y] == )
{
que.push(todo);
mp[todo.x][todo.y]++;
}
}
printf("%.10f\n", anser);
}
E
给你一个大小为N(N<=16)的集合
然后再给你个N个质数 要求你求第K小的一个满足要求的数 一个数满足要求当且仅当其质因数都在集合内
二分搜索 分成两个集合各自乘积 然后从一个集合的number[0].size()开始 递减 从另外一个 number[1].size()开始递增 用一个cur来维护每个number[0][i]的贡献
因为当最坏的情况时后面的数比前面的大 所以折半的时候前面的集合要适当小一点不然会T
#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll Mod = ;
ll k;
ll limit = 1e18;
ll num[];
double anser = ;
vector<ll> number[];
void dfs(int l, int r, ll x, int pos)
{
number[pos].push_back(x);
for (int i = l; i <= r; i++)
{
if (limit / num[i] >= x)
{
dfs(i, r, x * num[i], pos);
}
}
}
ll check(ll x)
{
ll sum = ;
ll cur = ;
for (int i = number[].size() - ; i >= ; i--)
{
while (cur < number[].size() && number[][cur] <= x / number[][i])
{
++cur;
}
sum += cur;
}
return sum;
}
int main()
{
int n;
cin >> n;
for (int i = ; i <= n; i++)
{
cin >> num[i];
}
sort(num + , num + + n);
cin >> k;
//TS;
dfs(, min(, n), , );
dfs(min(, n) + , n, , );
cout << number[].size() << " " << number[].size() << endl;
//TS;
sort(number[].begin(), number[].end());
sort(number[].begin(), number[].end());
ll l = ;
ll r = 1e18;
while (l < r - )
{
ll mid = (l + r) >> ;
if (check(mid) >= k)
{
r = mid;
}
else
{
l = mid;
}
}
cout << r << endl;
}
Codeforces 912 质因数折半 方格数学期望的更多相关文章
- Codeforces 839C Journey - 树形动态规划 - 数学期望
There are n cities and n - 1 roads in the Seven Kingdoms, each road connects two cities and we can r ...
- Codeforces Round #259(div2)C(数学期望)
数学题. 关键是求最大值为k时有多少种情况,结果是kn-(k-1)n-1.可以这么想:每一次都从1至k里选,共kn种,这里需要再减去每一次都从1至k-1里面选的情况.当然也可以分类计数法:按出现几次k ...
- CodeForces Div1: 995 D. Game(数学期望)
Allen and Bessie are playing a simple number game. They both know a function f:{0,1}n→Rf:{0,1}n→R, i ...
- Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum (数学期望)
题目链接 题意 : 一个m面的骰子,掷n次,问得到最大值的期望. 思路 : 数学期望,离散时的公式是E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn) p(xi)的是 ...
- 【整理】简单的数学期望和概率DP
数学期望 P=Σ每一种状态*对应的概率. 因为不可能枚举完所有的状态,有时也不可能枚举完,比如抛硬币,有可能一直是正面,etc.在没有接触数学期望时看到数学期望的题可能会觉得很阔怕(因为我高中就是这么 ...
- 2019暑期集训第二讲 - 组合数学&概率&数学期望
A - 容斥原理(CodeForces - 451E) 二进制状态压缩暴力枚举哪几个花选的个数超过了总个数,卢卡斯定理求组合数,容斥原理求答案 可以先把每个花的数量当成无限个,这样就是一个多重集的组合 ...
- 动态规划之经典数学期望和概率DP
起因:在一场训练赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6829 题目大意:有三个人,他们分别有\(X,Y,Z\)块钱 ...
- [BZOJ 3143][HNOI2013]游走(数学期望)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3143 分析: 易得如果知道了每条边经过的数学期望,那就可以贪心着按每条边的期望的大小赋 ...
- 数学期望和概率DP题目泛做(为了对应AD的课件)
题1: Uva 1636 Headshot 题目大意: 给出一个000111序列,注意实际上是环状的.问是0出现的概率大,还是当前是0,下一个还是0的概率大. 问题比较简单,注意比较大小: A/C & ...
随机推荐
- 快速排序和二分查找(Go)
package main import ( "fmt" "sync") var waitGroup sync.WaitGroup func main() { d ...
- gsensor架构和原理分析【转】
本文转载自:http://blog.csdn.net/u012296694/article/details/48055491 本文主要描述了在android2.3平台G-sensor相关软硬件的体系架 ...
- leetcode-mid-dynamic programming-55. Jump Game
mycode 71.47% 思路: 既然要到达终点,那么俺就可以倒推,要想到达n,可以有以下情况 1)到达n-1,然后该位置最少可以走一步 2)到达n-2,然后该位置最少可以走两步 3)到达n-3, ...
- 【ASK】设置网卡启动遇到的事!
上次动笔是16年的事情了,一晃3年过去了.算了,不感慨了.直奔主题吧. 1.今天朋友要把一批win10的机器设置成网卡启动. 2.网卡是intel集成的. 3.按照主板说明已经设置成功. 4.通过wi ...
- Win7下使用TortoiseGit设置保存密码
1. 打开 TortoiseGit 设置,编辑 .gitconfig 文件,如图: 2. 添加下面两行配置,如图: [credential] helper = store 3. 保存退出即可
- c++实验8 哈夫曼编码-译码器
哈夫曼编码-译码器 此次实验的注释解析多加不少---若对小伙伴们有帮助 希望各位麻烦点个关注 多谢 1.哈夫曼树构造算法为: (1)由给定的n个权值{w1,w2,…,wn}构造n棵只有根结点的二叉树, ...
- CentOS安Elasticsearch
工作中有需求用到es做数据分析和日志搜索的,整理记录一下安装部署过程.ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful we ...
- 使用JS区分客户端
之前遇到,上司这样一个指示. 他说:“你看,能不能帮我解决一下,ipad自带的,键盘问题.” 就是我们做的这个项目,是一个 web项目,然后 要求 电脑端 和 平板都可以访问.在日期输入框的地方.他们 ...
- ionic3遇到的刷新页面服务器关闭的问题
这几天为了写毕设,需要使用Ionic写手机客户端,遇到一些奇怪的问题,具体问题就是启动使用ionic serve启动服务器之后只要一刷新界面就会导致服务器关闭,报的错误如下: events.js:13 ...
- Python基础语法之常量与变量
一.变量的命名规则 只能以下划线,数字和字母组成,不可以是特殊字符: 不可以以数字开头: 关键字不可作为变量名: 变量名区分大小写: 要具有描述性: 二.常量 python中并没有关键字const,在 ...