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 ;
}

考虑到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的更多相关文章

  1. 牛客国庆集训派对Day2

    题目链接:https://www.nowcoder.com/acm/contest/202/A A 题意:给出最大4096*64和64*4096的矩阵,其中有一个矩阵只含有0和1,问你它们相乘所得到得 ...

  2. 牛客国庆集训派对Day2 H 期望

    小贝喜欢玩卡牌游戏.某个游戏体系中共有N种卡牌,其中M种是稀有的.小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝.普通卡可能多次出现,而稀有卡牌不会被重复抽到.小 ...

  3. 牛客国庆集训派对Day4 Solution

    A    深度学习 puts(n) #include <bits/stdc++.h> using namespace std; int main() { double n; while ( ...

  4. 牛客国庆集训派对Day1 Solution

    A    Tobaku Mokushiroku Kaiji 水. #include <bits/stdc++.h> using namespace std; ], b[]; void Ru ...

  5. 牛客国庆集训派对Day3 Solution

    A    Knight 留坑. B    Tree 思路:两次树形DP,但是要考虑0没有逆元 可以用前缀后缀做 #include <bits/stdc++.h> using namespa ...

  6. 牛客国庆集训派对Day5 Solution

    A    璀璨光滑 留坑. B    电音之王 蒙特马利大数乘模运算 #include <bits/stdc++.h> using namespace std; typedef long ...

  7. 牛客国庆集训派对Day6 Solution

    A    Birthday 思路:设置一个源点,一个汇点,每次对$源点对a_i, b_i , a_i 对 b_i 连一条流为1,费用为0的边$ 每个点都再连一条 1, 3, 5, 7, ....的边到 ...

  8. 牛客国庆集训派对Day7 Solution

    A    Relic Discovery 水. #include <bits/stdc++.h> using namespace std; int t, n; int main() { s ...

  9. 牛客国庆集训派对Day2 F、平衡二叉树 【构造+记忆化搜索】

    任意门:https://www.nowcoder.com/acm/contest/202/F 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 1048576K,其他语言2097152K6 ...

随机推荐

  1. ios button标记

    在写项目的时候,for循环创建多个button,在需要设置背景图片和,需要标记所选中的button的需求, 在这里提供两种方法: 一: 1:把for循环创建的button全部装到一个新建的数组中,把他 ...

  2. 实现Runnable接口和继承Thread类区别

    如果一个类继承Thread,则不适合资源共享.但是如果实现了Runable接口的话,则很容易的实现资源共享. 实现Runnable接口比继承Thread类所具有的优势: 1):适合多个相同的程序代码的 ...

  3. Triton调试记录

    先编译Release版本 先从下拉列表选择Release-MT-DLL,然后选中Triton-vc14工程, 修改项目属性配置为Release-MT-DLL-NODX,NODX的意思是不使用Direc ...

  4. (转)淘淘商城系列——中文分析器IK-Analyzer的使用

    在Solr中默认是没有中文分析器的,需要手工配置,配置一个FieldType,在FieldType中指定使用的中文分析器.另外,Solr中的字段(即业务域)必须先定义后使用.下面我们先把中文分析器配好 ...

  5. 在lampp的proftpd下新增FTP用户的方法与配置

    用LAMPP的安装方法可以开一个默认的lampp用户,不过多用户怎样管理.目录怎样设置?这里简明说一下. 要求:使用Lampp的proftpd,开通多个FTP用户,并各分配一个目录,而且需要限制用户在 ...

  6. Android之ListView分页数据加载

    1.效果如下: 实例如下:  上图的添加数据按钮可以换成一个进度条  因为没有数据所以我加了一个按钮添加到数据库用于测试:一般在服务器拉去数据需要一定的时间,所以可以弄个进度条来提示用户: 点击加载按 ...

  7. fastcgi_param解释

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径 fastcgi_param QUERY_STRI ...

  8. Windows Phone 几种弹出框提示方式

    首先,我们需要在网络上下载一个Coding4Fun 然后,引用  using Coding4Fun.Phone.Controls.Toolkit;                using Codin ...

  9. OC开发_Storyboard——Core Data

    一 .NSManagedObjectContext 1.我们要想操作Core Data,首先需要一个NSManagedObjectContext2.那我们如何获得Context呢:创建一个UIMana ...

  10. tarjan算法求缩点+树形DP求直径

    hdu4612 Warm up Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...