Solved:2

Rank:136

A Eddy Walker

题意:T个场景 每个场景是一个长度为n的环 从0开始 每次要么向前走要么向后走 求恰好第一次到m点且其他点都到过的概率

   每次的答案是前缀概率积

题解:m=0的时候 只有n=1的时候是1 否则是0 然后感性的理解到其他n-1点的概率是一样的 所以每个点的概率是1/(n-1)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7; ll pow_mod(ll x, ll y) {
ll res = 1;
while(y) {
if(y & 1) res = res * x % mod;
x = x * x % mod;
y >>= 1;
}
return res;
} int main() {
ll ans = 1;
int T;
scanf("%d", &T);
while(T--) {
ll n, m;
scanf("%lld%lld", &n, &m);
if(n == 1 && m == 0) {
printf("%lld\n", ans);
continue;
}
if(m == 0) ans = 0;
else ans = ans * pow_mod(n - 1, mod - 2) % mod;
printf("%lld\n", ans);
}
return 0;
}

A Eddy Walker

D Kth Minimum Clique

题意:100个点的图 输出点权第k小的团

题解:考虑把点一个一个插入进去 用优先队列维护团的大小

   每次取出最小的团 然后判断一下可以把哪个点放进来继续是团 用bitset维护

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; int n, k, cnt;
int val[105];
char tu[105][105]; struct node {
int pos;
ll sum;
bitset<105> bt; friend bool operator < (node A, node B) {
return A.sum > B.sum;
}
}; bitset<105> btt[105];
int main() {
cnt = 0;
scanf("%d%d", &n, &k); for(int i = 1; i <= n; i++) scanf("%d", &val[i]);
for(int i = 1; i <= n; i++) {
scanf("%s", tu[i] + 1);
for(int j = 1; j <= n; j++)
if(tu[i][j] == '1') btt[i][j] = 1;
} if(k == 1) {
puts("0");
return 0;
}
k--; priority_queue<node> que;
for(int i = 1; i <= n; i++) que.push((node){i, 1LL * val[i], btt[i]}); while(!que.empty()) {
node t = que.top();
que.pop();
k--;
if(k == 0) {
printf("%lld\n", t.sum);
return 0;
} for(int i = t.pos + 1; i <= n; i++)
if(t.bt[i]) que.push((node){i, t.sum + 1LL * val[i], t.bt & btt[i]});
}
puts("-1");
return 0;
}

D Kth Minimum Clique

E MASE

题意:给一个N x M的01矩阵(M <= 10) 1表示墙 每个点可以往左右下走

   一个修改操作 把之前矩阵中某个位置的数取反

   一个查询操作 查询从第一行的一个位置走到第n行一个位置的方案数

题解:做的第一道动态DP的题 由于一些奇特的性质

   DP的转移可以用矩阵表示 矩阵乘法有结合率 线段树可以维护矩阵的区间积

   然后就这样了....

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7; int n, m, t;
char s[100005][12];
struct martix {
ll c[10][10];
}sum[400005]; martix mul(martix x, martix y) {
martix res;
for(int i = 0; i < m; i++)
for(int j = 0; j < m; j++) res.c[i][j] = 0; for(int i = 0; i < m; i++)
for(int k = 0; k < m; k++)
for(int j = 0; j < m; j++)
res.c[i][j] = (res.c[i][j] + x.c[i][k] * y.c[k][j] % mod) % mod;
return res;
} martix fun(char a[12]) {
martix res;
for(int i = 0; i < m; i++)
for(int j = 0; j < m; j++) res.c[i][j] = 0; for(int i = 0; i < m; i++) {
if(a[i] == '0') {
int l = i, r = i;
while(l - 1 >= 0 && a[l - 1] == '0') l--;
while(r + 1 < m && a[r + 1] == '0') r++;
for(int j = l; j <= r; j++) res.c[i][j] = 1;
}
}
return res;
} void pushup(int rt) {
sum[rt] = mul(sum[rt << 1], sum[rt << 1 | 1]);
} void build(int l, int r, int rt) {
if(l == r) {
sum[rt] = fun(s[l]);
return;
} int m = l + r >> 1;
build(l, m, rt << 1);
build(m + 1, r, rt << 1 | 1);
pushup(rt);
} void update(int k, int l, int r, int rt) {
if(l == r) {
sum[rt] = fun(s[k]);
return;
} int m = l + r >> 1;
if(k <= m) update(k, l, m, rt << 1);
else update(k, m + 1, r, rt << 1 | 1);
pushup(rt);
} int main() {
scanf("%d%d%d", &n, &m, &t);
for(int i = 1; i <= n; i++) {
scanf("%s", s[i]);
} build(1, n, 1);
while(t--) {
int opt, a, b;
scanf("%d%d%d", &opt, &a, &b);
if(opt == 1) {
if(s[a][b - 1] == '0') s[a][b - 1] = '1';
else s[a][b - 1] = '0';
update(a, 1, n, 1);
} else if(opt == 2) {
printf("%lld\n", sum[1].c[a - 1][b - 1]);
}
}
return 0;
}

E MASE

F Partition problem

签到题

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans;
int n; ll q[30][30];
ll sum[30];
int id[30];
void dfs(int now, int tot, ll val) {
if(tot == n) {
ans = max(ans, val);
return;
}
if(now > n * 2) return; for(int i = now; i <= n * 2; i++) {
ll tmp = val + sum[i];
for(int j = 1; j <= tot; j++) tmp -= q[i][id[j]] * 2LL;
tot++;
id[tot] = i;
dfs(i + 1, tot, tmp);
tot--;
}
return;
} int main() {
ans = 0;
scanf("%d", &n);
for(int i = 1; i <= n * 2; i++) {
for(int j = 1; j <= n * 2; j++) {
scanf("%lld", &q[i][j]);
sum[i] += q[i][j];
}
} dfs(1, 0, 0);
printf("%lld\n", ans);
return 0;
}

F Partition problem

2019牛客多校 Round2的更多相关文章

  1. 2019牛客多校第一场 I Points Division(动态规划+线段树)

    2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...

  2. 2019牛客多校第二场 A Eddy Walker(概率推公式)

    2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...

  3. 2019牛客多校第八场 F题 Flowers 计算几何+线段树

    2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...

  4. 2019牛客多校 Round4

    Solved:3 Rank:331 B xor 题意:5e4个集合 每个集合最多32个数 5e4个询问 询问l到r个集合是不是都有一个子集的xor和等于x 题解:在牛客多校第一场学了线性基 然后这个题 ...

  5. 2019牛客多校第一场E ABBA(DP)题解

    链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 ABBA 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语 ...

  6. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  7. 2019牛客多校第四场 A meeting

    链接:https://ac.nowcoder.com/acm/contest/884/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10485 ...

  8. [2019牛客多校第二场][G. Polygons]

    题目链接:https://ac.nowcoder.com/acm/contest/882/G 题目大意:有\(n\)条直线将平面分成若干个区域,要求处理\(m\)次询问:求第\(q\)大的区域面积.保 ...

  9. 2019 牛客多校第一场 D Parity of Tuples

    题目链接:https://ac.nowcoder.com/acm/contest/881/D 看此博客之前请先参阅吕凯飞的论文<集合幂级数的性质与应用及其快速算法>,论文中很多符号会被本文 ...

随机推荐

  1. d3 zoom 抖动问题 事件

    最近在使用d3 zoom得时候   遇到一个小坑 直接对元素添加 zoom事件 会有很大得抖动,查文档 看代码之后发现是 由于元素在不断变化, 所以计算基础值也不不断变化,所以会导致计算出来得值 忽大 ...

  2. 【MySQL 高级】架构介绍

    MySQL高级 架构介绍 MySQL 简介 MySQL 安装 Docker 安装 参考链接 Linux 安装 参考链接 MySQL 配置文件 log-bin:二进制日志文件.用于主从复制.它记录了用户 ...

  3. 【高级排序算法】2、归并排序法的实现-Merge Sort

    简单记录 - bobo老师的玩转算法系列–玩转算法 -高级排序算法 Merge Sort 归并排序 Java实现归并排序 SortTestHelper 排序测试辅助类 package algo; im ...

  4. mysql .sock丢时候如何链接数据库

    在mysql服务器本机上链接mysql数据库时,经常会噢出现mysql.sock不存在,导致无法链接的问题,这是因为如果指定localhost作为一个主机名,则mysqladmin默认使用unix套接 ...

  5. innnodb_doublewrite

    有写场景下,双写缓冲确实没必要,例如,你也许像在备库上禁用双写缓冲,此外,一些文件系统,例如zfs做了同样的事,所以,没必要再让innodb做一遍. innodb_double_write=0 即可关 ...

  6. QPinter 常用绘制图像的方法

    阅读本文大概需要 3 分钟 我们在开发软件的过程中,绘制图像功能必不可少,使用 Qt 绘制图像时非常简单,只需要传递几个参数就可以实现功能,在 Qt 中绘制图像的 api有好几个 void drawI ...

  7. 【Oracle】Script to Collect DRM Information (drmdiag.sql) (文档 ID 1492990.1)

    脚本对应如下: The following (drmdiag.sql) is a script to collect information related to DRM (Dyanamic Reso ...

  8. 代码审计 - BugkuCTF

    extract变量覆盖: 相关函数: extract()函数:从数组中将变量导入到当前的符号表.把数组键名作为变量名,数组的键值作为变量值.但是当变量中有同名的元素时会默认覆盖掉之前的变量值. tri ...

  9. rename命令和批量重命名

    本文为转载文章,转发自 https://blog.csdn.net/GGxiaobai/article/details/53507454 早期版本的rename是C语言版本,如今新的Ubuntu中采用 ...

  10. 1.2V升压到3V和3.3V的升压芯片

    1.2V镍氢电池升压到3V和3.3V输出,1.2V升压3V,1.2V升压3.3V稳压输出供电的芯片. PW5100 是一款低静态电流.达效率. PFM 模式控制的同步升压变换器. PW5100 所需的 ...