problem1 link

二分答案。然后判断。将所有的机器按照$a_{i}$排序,$a_{i}$相同的按照$b_{i}$排序。用一个优先队列维护这些机器。这样对于第$i$个部分,拿出队列开始的机器来生产该部分;如果队列开头的机器生产的部分没用完,则将其左区间$a_{t}$设置为$a_{t}+1$然后重新塞到队列里。

problem2 link

首先由$A_{i}$得到$A_{i-1}$的方式为$A_{i-1}=((A_{i}+2^{50}-b)$^$a)$&$(2^{50}-1)$。然后就是一个数字一个数字暴力计算$B$值。总的累积复杂度是$O(n)$的。

problem3 link

令$f[i][j]$ 表示$vals[i]*vals[j]$对答案有贡献的概率。

令$dp[i][j][n]$表示$(i,j)$对答案有贡献且序列中总的元素个数为$n$的概率(那么$f[i][j]=dp[i][j][n]$)。考虑整个序列的长度从长度为 $n-1$转移到$n$。那么对于$dp[i][j][n]$来说,可以从下面三种情况转移而来:

(1)$dp[i-1][j-1][n-1]$: 在前面新增一个元素

(2)$dp[i][j-1][n-1]$: 在中间新增一个元素

(3)$dp[i][j][n-1]$: 在后面新增一个元素

code for problem1

#include <algorithm>
#include <queue>
#include <vector> class FleetFunding {
public:
int maxShips(int m, const std::vector<int> &k, const std::vector<int> &a,
const std::vector<int> &b) {
int n = static_cast<int>(k.size());
struct node {
int L, R, cnt; node() = default;
node(int L, int R, int cnt) : L(L), R(R), cnt(cnt) {}
bool operator<(const node &A) const {
if (L != A.L) return L > A.L;
return R > A.R;
}
};
auto Check = [&](int M) {
if (M == 0) {
return true;
}
std::priority_queue<node> Q;
for (int i = 0; i < n; ++i) {
Q.push(node(a[i], b[i], k[i]));
}
for (int i = 1; i <= m; ++i) {
if (Q.empty()) {
return false;
}
int sum = 0;
while (sum < M) {
if (Q.empty() || Q.top().L != i) {
return false;
}
if (sum + Q.top().cnt < M) {
sum += Q.top().cnt;
Q.pop();
} else {
node p = Q.top();
Q.pop();
p.cnt -= M - sum;
++p.L;
if (p.L <= p.R && p.cnt > 0) {
Q.push(p);
}
break;
}
}
while (!Q.empty() && Q.top().L == i) {
node p = Q.top();
Q.pop();
++p.L;
if (p.L <= p.R) {
Q.push(p);
}
}
}
return true;
}; int sum = 0;
for (int i = 0; i < n; ++i) {
sum += k[i];
}
int low = 0, high = sum / m;
int result = 0;
while (low <= high) {
int M = (low + high) >> 1;
if (Check(M)) {
result = std::max(result, M);
low = M + 1;
} else {
high = M - 1;
}
}
return result;
}
};

code for problem2

class LimitedMemorySeries2 {
public:
int getSum(int n, long long x0, long long a, long long b) {
constexpr int kMod = 1000000007;
constexpr long long M = (1ll << 50) - 1; auto NextX = [&](long long x) { return ((x ^ a) + b) & M; }; auto PreX = [&](long long x) { return ((x + M + 1 - b) ^ a) & M; }; auto Cal = [&](int id, long long x, int n) {
int ll = id, rr = id;
int result = 0;
long long lx = x, rx = x;
while (ll - 1 >= 0 && rr + 1 < n) {
lx = PreX(lx);
rx = NextX(rx);
if (lx < x && x > rx) {
++result;
--ll;
++rr;
} else {
break;
}
}
return result;
}; int result = 0;
long long t = x0;
for (int i = 0; i < n; ++i) {
result = (result + Cal(i, t, n)) % kMod;
t = NextX(t);
}
return result;
}
};

code for problem3

#include <vector>

class CoinFlips {
public:
double getExpectation(const std::vector<int> &vals, int prob) {
const double p = prob / 1000000000.0;
int n = static_cast<int>(vals.size());
std::vector<double> p2(n + 1);
p2[0] = 1.0;
for (int i = 1; i <= n; ++i) {
p2[i] = p2[i - 1] * (1 - p);
}
std::vector<std::vector<double>> prefix(n + 1, std::vector<double>(n + 1));
std::vector<std::vector<double>> prefix_sum(n + 1,
std::vector<double>(n + 1));
for (int len = 3; len <= n; ++len) {
for (int i = 1; i <= len; ++i) {
prefix[len][i] = p2[i - 1] * p;
if (i == 1) {
prefix[len][i] += p2[len];
}
prefix_sum[len][i] = prefix_sum[len][i - 1] + prefix[len][i];
}
}
std::vector<std::vector<std::vector<double>>> f(
2, std::vector<std::vector<double>>(n + 1, std::vector<double>(n + 1)));
int pre = 0, cur = 1;
for (int len = 3; len <= n; ++len) {
for (int i = 0; i <= n; ++i) {
for (int j = 0; j <= n; ++j) {
f[cur][i][j] = 0;
}
}
for (int L = 1; L <= len; ++L) {
for (int R = L + 2; R <= len; ++R) {
f[cur][L][R] =
prefix_sum[len][L - 1] * f[pre][L - 1][R - 1] +
(prefix_sum[len][R - 1] - prefix_sum[len][L]) * f[pre][L][R - 1] +
(1 - prefix_sum[len][R]) * f[pre][L][R];
if (L + 2 == R) {
f[cur][L][R] += p2[L] * p;
}
}
}
pre ^= 1;
cur ^= 1;
}
double result = 0.0;
for (int i = 0; i < n; ++i) {
for (int j = i + 2; j < n; ++j) {
result += vals[i] * vals[j] * f[pre][i + 1][j + 1];
}
}
return result;
}
};

topcoder srm 681 div1的更多相关文章

  1. Topcoder SRM 643 Div1 250<peter_pan>

    Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...

  2. Topcoder Srm 726 Div1 Hard

    Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...

  3. topcoder srm 714 div1

    problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...

  4. topcoder srm 738 div1 FindThePerfectTriangle(枚举)

    Problem Statement      You are given the ints perimeter and area. Your task is to find a triangle wi ...

  5. Topcoder SRM 602 div1题解

    打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...

  6. Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串

    Problem Statement      The Happy Letter game is played as follows: At the beginning, several players ...

  7. Topcoder SRM 584 DIV1 600

    思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...

  8. TopCoder SRM 605 DIV1

    604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...

  9. topcoder srm 575 div1

    problem1 link 如果$k$是先手必胜那么$f(k)=1$否则$f(k)=0$ 通过对前面小的数字的计算可以发现:(1)$f(2k+1)=0$,(2)$f(2^{2k+1})=0$,(3)其 ...

随机推荐

  1. java微信小程序调用支付接口(转)

    简介:微信小程序支付这里的坑还是有的,所以提醒各位在编写的一定要注意!!! 1.首先呢,你需要准备openid,appid,还有申请微信支付后要设置一个32位的密钥,需要先生成一个sign,得到pre ...

  2. C++调用openssl库生成RSA加密秘钥对

    直接上代码.默认生成的是pkcs#1格式 // ---- rsa非对称加解密 ---- // #define KEY_LENGTH 1024 // 密钥长度 #define PUB_KEY_FILE ...

  3. Python杨辉三角

    杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个 ...

  4. kali linux主题下载

    主题下载网站 https://www.gnome-look.org/ 下载好安装包后解压 将文件夹移动到 usr/share/theme/ 下 mv download ../usr/share/the ...

  5. 斯坦福大学自然语言处理第四课“语言模型(Language Modeling)”

    http://52opencourse.com/111/斯坦福大学自然语言处理第四课-语言模型(language-modeling) 一.课程介绍 斯坦福大学于2012年3月在Coursera启动了在 ...

  6. jQuery样式--css(name|pro|[,val|fn])

    css(name|pro|[,val|fn]) 概述 访问匹配元素的样式属性 参数 name  要访问的属性名称 name  一个或多个CSS属性组成的一个数组 properties  要设置为样式属 ...

  7. codeforces 980A Links and Pearls

    题意: 有珍珠和线,问能否重新安排使得相邻珍珠之间的线的数量相等. 思路: 首先,珍珠为0或者线为0,那么都满足条件: 其次,如果珍珠的个数大于线的个数,那么肯定不满足条件: 然后,如果线的个数能够被 ...

  8. MVC 下拉列表三级联动

    当前所做的项目,关于数据库设计的时候有点小意思,表A是三个联合主键,key1,key2,key3,表B是四个联合主键 key1,key2,key3,key4,其中表B的联合外键关联表A对应的联合主键, ...

  9. Spark学习之路 (二)Spark2.3 HA集群的分布式安装

    一.下载Spark安装包 1.从官网下载 http://spark.apache.org/downloads.html 2.从微软的镜像站下载 http://mirrors.hust.edu.cn/a ...

  10. Eclipse中tomcat更改部署路径 deply path

    默认是部署在项目元数据文件夹.metadata文件夹下,需要更改到tomcat/webapps目录下 Eclipse中tomcat service设置 选择window ----show view-- ...