A    深度学习

puts(n)

 #include <bits/stdc++.h>
using namespace std; int main()
{
double n;
while (scanf("%lf", &n) != EOF)
printf("%.10f\n", n);
return ;
}

B    异或求和

思路:  有一个$O(nlogn^2)$ 的做法,但是T了。

设$bit(x, i)$为 x在二进制下第i位为1还是0

考虑 $\sum_{1 <= i < j < k <= n}(a_i \oplus a_j)(a_j \oplus a_k)(a_i \oplus a_k)$

将最后一部分的 $(a_i \oplus a_k)$ 拆分成 $\sum_{l = 0}^{l = 29}(bit(a_i, l))(bit(a_k, l))$

那么我们再枚举j  就可以

T了的代码:

#include <bits/stdc++.h>
using namespace std; #define N 100010
#define ll long long ll MOD = (ll); int n;
int arr[N], prefix[][][][], suffix[][][][]; void Run()
{
while (scanf("%d", &n) != EOF)
{
for (int i = ; i <= n; ++i) scanf("%d", arr + i);
bitset <> b;
for (int i = ; i <= n; ++i)
{
b = arr[i];
for (int j = ; j >= ; --j)
for (int k = ; k >= ; --k)
++suffix[j][b[j]][k][b[k]];
}
b = arr[];
for (int j = ; j >= ; --j)
for (int k = ; k >= ; --k)
++prefix[j][b[j]][k][b[k]];
ll ans = ;
for (int i = ; i < n; ++i)
{
b = arr[i];
for (int j = ; j >= ; --j)
for (int k = ; k >= ; --k)
--suffix[j][b[j]][k][b[k]];
for (int j = ; j >= ; --j)
{
ll l = , r = ;
// enum 0 1
for (int k = ; k >= ; --k)
{ l = (l + ((1ll << k) * prefix[j][][k][b[k] ^ ]) % MOD) % MOD;
r = (r + ((1ll << k) * suffix[j][][k][b[k] ^ ]) % MOD) % MOD;
}
ans = (ans + (1ll << j) * l % MOD * r % MOD) % MOD;
l = , r = ;
// enum 1 0
for (int k = ; k >= ; --k)
{
l = (l + ((1ll << k) * prefix[j][][k][b[k] ^ ]) % MOD) % MOD;
r = (r + ((1ll << k) * suffix[j][][k][b[k] ^ ]) % MOD) % MOD;
}
ans = (ans + (1ll << j) * l % MOD * r % MOD) % MOD;
}
for (int j = ; j >= ; --j)
for (int k = ; k >= ; --k)
++prefix[j][b[j]][k][b[k]];
}
printf("%lld\n", ans);
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run();
return ;
}

C    异或计数

留坑。

D    最小生成树

思路:用最小的点权去连边

 #include <bits/stdc++.h>
using namespace std; #define N 100010
#define ll long long int n; int main()
{
while (scanf("%d", &n) != EOF)
{
ll res = , num, Min = 0x3f3f3f3f3f3f3f3f;
for (int i = ; i <= n; ++i)
{
scanf("%lld\n", &num);
Min = min(Min, num);
res += num;
}
printf("%lld\n", res + Min * (n - ));
}
return ;
}

E    乒乓球

留坑。

F    导数卷积

留坑。

G    区间权值

显然可以发现长度为l和n-l的权值相同,然后枚举每个长度l,发现出现次数为两端向中间增加,然后中间不变,最后O(n)扫一遍即可

 #include<bits/stdc++.h>

 using namespace std;

 typedef long long ll;

 const int maxn = (int)3e5 + ;
const ll MOD = 1e9 + ;
int n;
ll ans;
ll w[maxn];
ll val[maxn]; int main()
{
while(~scanf("%d", &n))
{
for(int i = ; i <= n; ++i)
{
scanf("%lld", val + i);
}
for(int i = ; i <= n; ++i)
{
scanf("%lld", w + i);
}
for(int i = ; i <= n; ++i)
{
val[i] += val[i - ];
val[i] %= MOD;
}
ans = ;
ll tmp = ;
for(int i = ; i <= n / ; ++i)
{
tmp += (val[n - i + ] - val[i - ] + MOD) % MOD;
tmp %= MOD;
ans += (tmp * w[i] % MOD + tmp * w[n - i + ] % MOD) % MOD;
ans %= MOD;
}
if(n & )
{
tmp += val[(n + ) / ] - val[n / ];
tmp %= MOD;
ans += tmp * w[(n + ) / ] % MOD;
ans %= MOD;
}
printf("%lld\n", ans);
}
return ;
}

H    树链博弈

思路:每层上都有偶数个黑点,后手必胜,否则,先手必胜

假设所有点都是白点,是先手必败态

如果先手必胜,那么走一步,走到先手必败态

如果是先手必败态,走一步,可以走到先手必胜态

 #include <bits/stdc++.h>
using namespace std; #define N 1010 int n;
int color[N], deep[N];
vector <int> G[N]; void DFS(int u, int fa, int deepth)
{
deep[deepth] += color[u];
for (auto v : G[u])
{
if (v == fa) continue;
DFS(v, u, deepth + );
}
} void Run()
{
while (scanf("%d", &n) != EOF)
{
for (int i = ; i <= n; ++i) scanf("%d", color + i);
for (int i = , u, v; i < n; ++i)
{
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
DFS(, , );
int res = ;
for (int i = ; i < n; ++i) if (deep[i] & ) res = ;
puts(res ? "First" : "Second");
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run();
return ;
}

I    连通块计数

分两种情况考虑,一种是含根,一种是不含根,分别计数

 #include <bits/stdc++.h>

 using namespace std;

 int main() {
long long ans, t ,x, i, n, MOD;
scanf("%lld\n",&n);
MOD = ;
ans = ; t = ;
for (i = ; i <= n; ++i) {
scanf("%lld\n",&x);
ans = (ans + (x * x + x) / ) % MOD;
t = (t * (x + )) % MOD;
}
ans = (ans + t) % MOD;
printf("%lld\n",ans);
return ;
}

J    寻找复读机

按题意模拟即可

 #include <bits/stdc++.h>
using namespace std; #define N 1010 int n, m;
int used[N], vis[N];
vector <int> ans;
char s[N][]; int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
memset(vis, , sizeof vis);
memset(used, , sizeof used);
ans.clear();
for (int i = , x; i <= m; ++i)
{
scanf("%d %s", &x, s[i]);
if (i == ) vis[x] = ;
else if (strcmp(s[i], s[i - ]) != ) vis[x] = ;
used[x] = ;
}
for (int i = ; i <= n; ++i) if (!vis[i])
ans.push_back(i);
if (!ans.size()) puts("");
for (int i = , len = ans.size(); i < len; ++i) printf("%d%c", ans[i], " \n"[i == len - ]);
}
return ;
}

牛客国庆集训派对Day4 Solution的更多相关文章

  1. 牛客国庆集训派对Day4 J-寻找复读机

    链接:https://www.nowcoder.com/acm/contest/204/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  2. 牛客国庆集训派对Day4 I-连通块计数(思维,组合数学)

    链接:https://www.nowcoder.com/acm/contest/204/I 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

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

    A    矩阵乘法 思路: 1° 牛客机器太快了,暴力能过. #include <bits/stdc++.h> using namespace std; #define N 5000 in ...

  4. 2018 牛客国庆集训派对Day4 - H 树链博弈

    链接:https://ac.nowcoder.com/acm/contest/204/H来源:牛客网 题目描述 给定一棵 n 个点的树,其中 1 号结点是根,每个结点要么是黑色要么是白色 现在小 Bo ...

  5. 牛客国庆集训派对Day4.B.异或求和(按位统计)

    题目链接 刷牛客一战到底做到的,感觉还挺有趣... \(Description\) 求给定\(n\)及序列\(A_i\),求\[\sum_{i\lt j\lt k}(A_i\oplus A_j)(A_ ...

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

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

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

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

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

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

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

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

随机推荐

  1. TabCtrl使用

    TabCtrl使用 0x1 新建子页面 插入三个对话框,ID分别为:IDD_PAGE_FILE.IDD_PAGE_NETWORK.IDD_PAGE_PROCESS 工具箱-[属性]-[Style]设置 ...

  2. Django 聚合与查询集API实现侧边栏

    本文从Django官方文档总结而来,将聚合的主要用法和查询集的常见方法做一归纳. 聚合 1. 聚合的产生来源于django数据库查询,通常我们使用django查询来完成增删查改,但是有时候需要更复杂的 ...

  3. 详解Android属性动画

    前面我们讲到的属性动画都是使用代码的定义方式:Android属性动画之ValueAnimator和Android属性动画之ObjectAnimator和AnimatorSet,下面我们再来看看使用XM ...

  4. OneNET麒麟座应用开发之一:初识OneNET麒麟座

    今天收到了OneNET麒麟座开发板.能得到使用的机会只能说是幸运的.首先上一张靓照: 板子使用的MCU是STM32F103RET6,带有GSM摸块和Wifi摸块可以联网.带有显示屏接口和I2C接口以及 ...

  5. Java基础99 待续

    1.待续 原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/107 ...

  6. SpringMVC(3):DispatcherServlet详解

    原文出处: 张开涛 3.1.DispatcherServlet作用 DispatcherServlet是前端控制器设计模式的实现,提供spring Web MVC的集中访问点,而且负责职责的分派,而且 ...

  7. Laravel框架中Blade模板的用法

    1. 继承.片段.占位.组件.插槽 1.1 继承 1.定义父模板 Laravel/resources/views/base.blade.php 2.子模板继承 @extends('base') 1.2 ...

  8. (String中)正则表达式使用如下

    package zhengze;/* * 正则表达式 */public class StringTestZhengZe { public static void main(String[] args) ...

  9. Oracle学习笔记--第3章 使用sql*plus工具

    使用sql*plus工具 1.sqlplus连接方式示例 sqlplus system/123[as sysdba]; 2.查看表结构命令;desc[ribe] e.g.      desc scot ...

  10. 超实用!!!使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器

    最近看到阿里云发布了一款名为 Alibaba Cloud Toolkit 的插件,可以帮助开发者高效开发并部署适合在云端运行的应用,瞬间击中了我的小心脏,这个对于个人开发者来说超级棒啊,终于不需要再手 ...