牛客国庆集训派对Day2 Solution
A 矩阵乘法
思路:
1° 牛客机器太快了,暴力能过。
#include <bits/stdc++.h>
using namespace std; #define N 5000 int n, p, m;
int a[N][], b[][N], ans[N][N]; void Run()
{
while (scanf("%d%d%d", &n, &p, &m) != EOF)
{
for (int i = ; i <= n; ++i)
for (int j = ; j <= p; ++j)
scanf("%X", &a[i][j]);
for (int j = ; j <= m; ++j)
for (int i = ; i <= p; ++i)
scanf("%1d", &b[i][j]);
for (int i = ; i <= n; ++i)
for (int j = ; j <= m; ++j)
for (int k = ; k <= p; ++k)
ans[i][j] += a[i][k] * b[k][j];
int res = ;
for (int i = ; i <= n; ++i)
for (int j = ; j <= m; ++j)
res ^= ans[i][j];
printf("%d\n", res);
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run();
return ;
}
2°
考虑到p很小,可以将它分块,比如说分成8Bit一块,那么对应的只有256种情况,可以预处理一下,然后乘法变成取值
复杂度大概在(4096 * 4096 * 8) 左右
#include <bits/stdc++.h>
using namespace std; #define N 5000 int n, p, m;
int a[N][], b[][N], ap[N][][], bp[][N], ans[N][N]; void Run()
{
while (scanf("%d%d%d", &n, &p, &m) != EOF)
{
for (int i = ; i < n; ++i)
for (int j = ; j < p; ++j)
scanf("%X", &a[i][j]);
for (int j = ; j < m; ++j)
for (int i = ; i < p; ++i)
scanf("%1d", &b[i][j]);
p = (p - ) / + ;
for (int i = ; i < n; ++i)
for (int j = ; j < p; ++j)
for (int k = ; k < ; ++k)
for (int l = ; l < ; ++l)
if (k & ( << l)) ap[i][j][k] += a[i][j * + l];
for (int j = ; j < m; ++j)
for (int i = p - ; i >= ; --i)
for (int k = ; k >= ; --k)
bp[i][j] = bp[i][j] * + b[k + * i][j];
for (int i = ; i < n; ++i)
for (int j = ; j < m; ++j)
for (int k = ; k < p; ++k)
ans[i][j] += ap[i][k][bp[k][j]];
int res = ;
for (int i = ; i < n; ++i)
for (int j = ; j < m; ++j)
res ^= ans[i][j];
printf("%d\n", res);
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run();
return ;
}
B 字符串的幂
留坑。
C 生命游戏
留坑。
D 数格点
留坑。
E 数据排序
留坑。
F 平衡二叉树
思路:显然,答案最大肯定是根节点下左子树是满二叉树,右子树是最小平衡二叉树
深度为n的二叉平衡树的最小节点数 = 左平衡树的最小节点数 + 右平衡树的最小结点树 + 当前树的根节点树(1)
显然 ,右平衡树的高度可以比左平衡树少d
当$n <= d$ 的时候 $F[n] = max(n, 0)$
所以$F[n] = F[n - 1] + F[n - d - 1] +1$
满二叉树的结点个数是$2^n$
#include <bits/stdc++.h>
using namespace std;
using ll = long long; int n, d;
ll f[]; ll qpow(ll base, ll n)
{
ll res = ;
while (n)
{
if (n & ) res *= base;
base *= base;
n >>= ;
}
return res;
} ll work(int h)
{
if (h <= d)
return max(h, );
if (f[h]) return f[h];
f[h] = work(h - ) + work(h - d - ) + ;
return f[h];
} void Run()
{
while (scanf("%d%d", &n, &d) != EOF)
{
memset(f, , sizeof f);
printf("%lld\n", qpow(2ll, n - ) - work(n - d - ) - );
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run();
return ;
}
G 数组合并
留坑。
H 卡牌游戏
思路:考虑抽到一张卡片的概率是$\frac{m}{n}$ 那么期望就是 $\frac{n}{m}$ 抽到一张之后再抽一张的概率是$\frac{m - 1}{n - 1}$
#include <bits/stdc++.h>
using namespace std; int t, n, m, k; int main()
{
scanf("%d", &t);
for (int kase = ; kase <= t; ++kase)
{
scanf("%d%d%d", &n, &m, &k);
double res = ;
for (int i = ; i <= k; ++i, --n, --m)
res += n * 1.0 / m;
printf("Case #%d: %.10f\n", kase, res);
}
return ;
}
I 游戏
留坑。
J 魔法阵
留坑。
K 排队
留坑。
牛客国庆集训派对Day2 Solution的更多相关文章
- 牛客国庆集训派对Day2
题目链接:https://www.nowcoder.com/acm/contest/202/A A 题意:给出最大4096*64和64*4096的矩阵,其中有一个矩阵只含有0和1,问你它们相乘所得到得 ...
- 牛客国庆集训派对Day2 H 期望
小贝喜欢玩卡牌游戏.某个游戏体系中共有N种卡牌,其中M种是稀有的.小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝.普通卡可能多次出现,而稀有卡牌不会被重复抽到.小 ...
- 牛客国庆集训派对Day4 Solution
A 深度学习 puts(n) #include <bits/stdc++.h> using namespace std; int main() { double n; while ( ...
- 牛客国庆集训派对Day1 Solution
A Tobaku Mokushiroku Kaiji 水. #include <bits/stdc++.h> using namespace std; ], b[]; void Ru ...
- 牛客国庆集训派对Day3 Solution
A Knight 留坑. B Tree 思路:两次树形DP,但是要考虑0没有逆元 可以用前缀后缀做 #include <bits/stdc++.h> using namespa ...
- 牛客国庆集训派对Day5 Solution
A 璀璨光滑 留坑. B 电音之王 蒙特马利大数乘模运算 #include <bits/stdc++.h> using namespace std; typedef long ...
- 牛客国庆集训派对Day6 Solution
A Birthday 思路:设置一个源点,一个汇点,每次对$源点对a_i, b_i , a_i 对 b_i 连一条流为1,费用为0的边$ 每个点都再连一条 1, 3, 5, 7, ....的边到 ...
- 牛客国庆集训派对Day7 Solution
A Relic Discovery 水. #include <bits/stdc++.h> using namespace std; int t, n; int main() { s ...
- 牛客国庆集训派对Day2 F、平衡二叉树 【构造+记忆化搜索】
任意门:https://www.nowcoder.com/acm/contest/202/F 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 1048576K,其他语言2097152K6 ...
随机推荐
- ActiveMQ伪集群部署
本文借鉴http://www.cnblogs.com/guozhen/p/5984915.html,在此基础上进行了完善,使之成为一个完整版的伪分布式部署说明,在此记录一下! 一.本文目的 介绍如何在 ...
- /etc/hostname
我们可以使用 hostname 命令来修改主机名,但只是临时生效,如果想永久生效可以编辑 /etc/hostname 文件,注意不是每个 Linux 发行版都有该文件 root@Ubuntu_Lee: ...
- Bash Shell 里的各种括号
天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题.对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash Shell几种括号 ...
- onTouch
OnTouchOmOnTouchListenerOnTouchEvent View的事件分发 : 对于事件分发机制,举个简单的例子,在一个Activity中只有一个按钮,如果我们想给这个按钮注册 ...
- STM32学习之路之入门篇
2006年ARM公司推出了基于ARMV7架构的cortex系列的标准体系结构,以满足各种技术得不同性能要求,包含了A,R,M三个分工明确的系列 其中A系列面向复杂的尖端应用程序,用于运行开放式的复杂操 ...
- C++11新特性之0——移动语义、移动构造函数和右值引用
C++引用现在分为左值引用(能取得其地址)和 右值引用(不能取得其地址).其实很好理解,左值引用中的左值一般指的是出现在等号左边的值(带名称的变量,带*号的指针等一类的数据),程序能对这样的左值进行引 ...
- JS:“分享到”之类的悬浮框的运动原理(代码)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- LeetCode——Invert Binary Tree
Description: Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9 to 4 / \ 7 2 / \ ...
- weblogic jprofile配置
前提: 1.安装好weblogic 2.安装好jprofile 非等待模式: export JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpo ...
- mysql格式化日期的函数
转自:https://www.cnblogs.com/duhuo/p/5650876.html mysql格式化日期 mysql查询记录如果有时间戳字段时,查看结果不方便,不能即时看到时间戳代表的 ...