牛客国庆集训派对Day4 Solution
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的更多相关文章
- 牛客国庆集训派对Day4 J-寻找复读机
链接:https://www.nowcoder.com/acm/contest/204/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...
- 牛客国庆集训派对Day4 I-连通块计数(思维,组合数学)
链接:https://www.nowcoder.com/acm/contest/204/I 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...
- 牛客国庆集训派对Day2 Solution
A 矩阵乘法 思路: 1° 牛客机器太快了,暴力能过. #include <bits/stdc++.h> using namespace std; #define N 5000 in ...
- 2018 牛客国庆集训派对Day4 - H 树链博弈
链接:https://ac.nowcoder.com/acm/contest/204/H来源:牛客网 题目描述 给定一棵 n 个点的树,其中 1 号结点是根,每个结点要么是黑色要么是白色 现在小 Bo ...
- 牛客国庆集训派对Day4.B.异或求和(按位统计)
题目链接 刷牛客一战到底做到的,感觉还挺有趣... \(Description\) 求给定\(n\)及序列\(A_i\),求\[\sum_{i\lt j\lt k}(A_i\oplus A_j)(A_ ...
- 牛客国庆集训派对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, ....的边到 ...
随机推荐
- spring mvc常用配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 【转】CString与string、char*的区别和转换
我们在C++的开发中经常会碰到string.char*以及CString,这三种都表示字符串类型,有很多相似又不同的地方,常常让人混淆.下面详细介绍这三者的区别.联系和转换: 各自的区别 char*: ...
- tomcat jsp页面乱码解决
浏览器接收服务器响应的中文参数: JSP页面中告诉浏览器使用什么编码: <%@ page language="java" contentType="text/htm ...
- linux下快速安装jenkins
Linux下快速安装Jenkins 建议使用 FileZilla 工具简化以下步骤中移动.环境变量配置等步骤. 1 软件下载 l Java:jdk-7u17-linux-x64.tar.g ...
- openwrt 添加luci选项
刚刚下载的openwrt trunk版本,安装后没有luci选项,如下图 需要添加luci页面选项. 步骤如下: (1)修改配置文件 .config , 将 CONFIG_FEED_luci is n ...
- openwrt git 代码下载地址
openwrt 各个版本代码下载 trunk:git clone git://github.com/openwrt/openwrt.git 15.05 (Chaos Calmer)git clone ...
- zabbix通过简单shell命令监控elasticsearch集群状态
简单命令监控elasticsearch集群状态 原理: 使用curl命令模拟访问任意一个es节点可以反馈的集群状态,集群的状态需要为green curl -sXGET http://serverip: ...
- sipML5聊天功能实现
一.环境说明:在阅读sipML5的API文档时,发现它具有聊天的功能,于是在sipML5的源码中进行设定,实现了注册之后可以英文聊天(中文聊天需要在FreeSWITCh中进行设定). 二.具体配置: ...
- .netcore 整合 log4net
1.背景 前两天,曾经的一个同事咨询我,怎样将log4net以中间件的形式整合到core里边去.我不假思索的回答,这种问题应该有人做过吧,他说没有.于是,我去博客园搜了下,发现还真没有,全部都是传统. ...
- Android 颜色透明度换算
每次开发的时候,UI在设计图中标注的颜色都是类似于#FF0000(红色),这倒没什么,但是呢后面却标注了30%的透明度,这下抓狂了,透明度怎么计算?不用着急,不用你算,收藏我这篇文章即可. 颜色简介 ...