20191029 牛客CSP-S提高组赛前集训营1
前一个小时看这几道题感觉要爆零
A. 仓鼠的石子游戏
分析一下发现a[i]>1a[i]>1a[i]>1时后先手必输,a[i]=1a[i]=1a[i]=1时先手必赢
然后直接看1的个数奇偶性就行了
CODE
#include <bits/stdc++.h>
using namespace std;
int main () {
int T, n, a; scanf("%d", &T);
while(T--) {
scanf("%d", &n);
int ans = 0;
for(int i = 1; i <= n; ++i)
scanf("%d", &a), ans ^= (a == 1);
puts(ans ? "rabbit" : "hamster");
}
}
B.乃爱与城市拥挤程度
f[i][j],g[i][j]f[i][j],g[i][j]f[i][j],g[i][j]分别表示iii点下方走jjj步的答案。
答案就是f[i][k],g[i][k]f[i][k],g[i][k]f[i][k],g[i][k]
傻逼树形DP
O(nklog)O(nk\log)O(nklog),有log\loglog是因为求逆元,实际上可以把要求逆元的数取出来O(n)O(n)O(n)求一遍就可以做到O(nk)O(nk)O(nk),不过没必要。
CODE
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
const int MAXK = 12;
const int mod = 1e9 + 7;
int n, k, f[MAXN][MAXK], g[MAXN][MAXK];
int fir[MAXN], to[MAXN<<1], nxt[MAXN<<1], cnt;
inline void link(int u, int v) {
to[++cnt] = v; nxt[cnt] = fir[u]; fir[u] = cnt;
to[++cnt] = u; nxt[cnt] = fir[v]; fir[v] = cnt;
}
inline int qpow(int a, int b) {
int re = 1;
while(b) {
if(b&1) re = 1ll * re * a % mod;
a = 1ll * a * a % mod; b >>= 1;
}
return re;
}
void dfs1(int u, int ff) {
for(int j = 0; j <= k; ++j) f[u][j] = 1, g[u][j] = 1;
for(int i = fir[u], v; i; i = nxt[i])
if((v=to[i]) != ff) {
dfs1(v, u);
for(int j = 1; j <= k; ++j) {
f[u][j] += f[v][j-1];
g[u][j] = 1ll*g[u][j]*g[v][j-1]%mod;
}
}
for(int j = 0; j <= k; ++j)
g[u][j] = 1ll * g[u][j] * f[u][j] % mod;
}
int F[MAXN], G[MAXN];
void dfs2(int u, int ff) {
F[u] = f[u][k], G[u] = g[u][k];
for(int i = fir[u], v; i; i = nxt[i])
if((v=to[i]) != ff) {
for(int j = k; j >= 1; --j) {
g[v][j] = 1ll * g[v][j] * qpow(f[v][j], mod-2) % mod * (f[v][j]+f[u][j-1]-(j>=2?f[v][j-2]:0)) % mod * g[u][j-1] % mod * qpow(f[u][j-1], mod-2) % mod * (f[u][j-1] - (j>=2?f[v][j-2]:0)) % mod * (j>=2?qpow(g[v][j-2], mod-2):1) % mod;
f[v][j] += f[u][j-1]-(j>=2?f[v][j-2]:0);
}
dfs2(v, u);
}
}
int main () {
scanf("%d%d", &n, &k);
for(int i = 1, u, v; i < n; ++i) scanf("%d%d", &u, &v), link(u, v);
dfs1(1, 0), dfs2(1, 0);
for(int i = 1; i <= n; ++i) printf("%d%c", F[i], " \n"[i==n]);
for(int i = 1; i <= n; ++i) printf("%d%c", G[i], " \n"[i==n]);
}
C.小w的魔术扑克
把一张牌的两面的值连边。
最后发现一个连通块,如果里面有重边或者环,这个连通块所有的值肯定都能凑出来。
只需要考虑那些树形态的连通块。
对于一棵树,询问区间是[l,r][l,r][l,r],如果整棵树值域都在[l,r][l,r][l,r]内,一定不能满足,否则就可以。所以求出每棵树的值域[mn,mx][mn,mx][mn,mx],然后包含这个区间的[l,r][l,r][l,r]答案都是NoNoNo。区间排序后O(n)O(n)O(n)直接做。
总时间复杂度O(nlogn)O(n\log n)O(nlogn)
upd:upd:upd:也可以在mxmxmx处附上mnmnmn的值,然后求一个前缀最大值,然后对于一个询问,如果1→r1\to r1→r的前缀最大值>=l>=l>=l就一定包含了一个区间。这样做是O(n)O(n)O(n)的。还更好写。。
CODE
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int n, m, k, Q;
int fir[MAXN], to[MAXN<<1], nxt[MAXN<<1], cnt = 1;
inline void link(int u, int v) {
to[++cnt] = v; nxt[cnt] = fir[u]; fir[u] = cnt;
to[++cnt] = u; nxt[cnt] = fir[v]; fir[v] = cnt;
}
int mn, mx;
bool vis[MAXN], inq[MAXN], flg;
void dfs(int u, int ff) {
vis[u] = inq[u] = 1;
mn = min(mn, u);
mx = max(mx, u);
for(int i = fir[u], v; i; i = nxt[i]) if((i^1) != ff){
if(!vis[v=to[i]]) dfs(v, i);
else if(inq[v]) flg = 1;
}
inq[u] = 0;
}
struct node {
int l, r, id;
inline bool operator <(const node &o)const {
return r < o.r;
}
}a[MAXN], q[MAXN];
bool ans[MAXN];
int main () {
scanf("%d%d", &n, &k);
for(int i = 1, u, v; i <= k; ++i) scanf("%d%d", &u, &v), link(u, v);
for(int i = 1; i <= n; ++i)
if(!vis[i]) {
flg = 0; mn = i, mx = i;
dfs(i, 0);
if(!flg) a[++m] = (node){ mn, mx };
}
sort(a + 1, a + m + 1);
scanf("%d", &Q);
for(int i = 1; i <= Q; ++i)
scanf("%d%d", &q[i].l, &q[i].r), q[i].id = i;
sort(q + 1, q + Q + 1);
int pos = 0;
for(int i = 1, j = 1; i <= Q; ++i) {
while(j <= m && a[j].r <= q[i].r) pos = max(pos, a[j++].l);
ans[q[i].id] = q[i].l <= pos;
}
for(int i = 1; i <= Q; ++i) puts(ans[i] ? "No" : "Yes");
}
然后莫名其妙就AK了。
20191029 牛客CSP-S提高组赛前集训营1的更多相关文章
- 牛客网CSP-S提高组赛前集训营Round4
牛客网CSP-S提高组赛前集训营 标签(空格分隔): 题解 算法 模拟赛 题目 描述 做法 \(BSOJ6377\) 求由\(n\)长度的数组复制\(k\)次的数组里每个连续子序列出现数字种类的和 对 ...
- 牛客CSP-S提高组赛前集训营1
牛客CSP-S提高组赛前集训营1 比赛链接 官方题解 before:T1观察+结论题,T2树形Dp,可以换根或up&down,T3正解妙,转化为图上问题.题目质量不错,但数据太水了~. A-仓 ...
- 牛客CSP-S提高组赛前集训营3
A 货物收集 显然是一个二分答案的题. #include<iostream> #include<cstdio> #include<cstring> #include ...
- 牛客CSP-S提高组赛前集训营3 赛后总结
货物收集 二分答案.复杂度\(O(n\log n)\). 货物分组 用费用提前计算的思想,考虑用一个新的箱子来装货物会发生什么. 显然费用会加上后面的所有货物的总重. \(60\)分的\(O(n^2) ...
- 牛客CSP-S提高组赛前集训营2 ———— 2019.10.31
比赛链接 期望得分:100+20+20 实际得分:40+20+30 awa cccc T1 :基于贪心的思路,然后开始爆搜(雾 那必然是会死的,好吧他就是死了 #include<iostrea ...
- 牛客CSP-S提高组赛前集训营1———2019.10.29 18:30 至 22:00
期望得分:100+0+10 实际得分:40+0+0 考炸了... T1:题目链接 究竟为什么会这样,,, 仔细研读我的丑代码 发现... 枯辽.... #include<cstdio> # ...
- 牛客CSP-S提高组赛前集训营2 T2沙漠点列
原题链接 算法不难,比赛的时候就和cyc大佬一起yy了正解,不过因为交的时候比较急(要回寝室惹),我有两数组开错大小直接爆到50,cyc大佬则只把文件输入关了一半,直接爆零(╯ ̄Д ̄)╯┻━┻ 要尽量 ...
- 牛客CSP-S提高组赛前集训营4 赛后总结
复读数组 分成 3 种区间算答案: 一个块内的区间 两个块交界处,长度小于块长的区间 长度不小于块长的区间 对于第三种区间,容易发现每个区间的权值一样,只需要算出个数即可. 对于前两种空间,我的思路是 ...
- 牛客CSP-S提高组赛前集训营5 赛后总结
A.无形的博弈 心理题. 答案为\(2^n\),可感性理解结论的正确性. #include<bits/stdc++.h> #define LL long long const LL Mod ...
随机推荐
- [HTTPS] - 请求API失败(Could not create SSL/TLS secure channel)之解决
背景 在单元测试中请求 HTTPS API 失败. 异常 Result StackTrace: at System.Web.Services.Protocols.WebClientProtocol. ...
- ASP.NET请求过程-从源码角度研究MVC路由、Handler、控制器
路由常用对象 RouteBase 用作表示 ASP.NET 路由的所有类的基类. 就是路由的一个基础抽象类. // // 摘要: // 用作表示 ASP.NET 路由的所有类的基类. [ ...
- Java设计模式:23种设计模式(转)
单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式. 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多 ...
- Spring Security 官网文档学习
文章目录 通过`maven`向普通的`WEB`项目中引入`spring security` 配置 `spring security` `configure(HttpSecurity)` 方法 自定义U ...
- flannel overlay网络浅析
Flannel基于UDP的网络实现 container-1的route表信息如下(b1): default via 100.96.1.1 dev eth0 100.96.1.0/24 dev eth0 ...
- mininet安装配置
mininet安装配置 安装mininet mininet使用 在VM中运行mininet 安装VMware,在VMware中打开下载好的mininet虚拟机映像 启动虚拟机,虚拟机的初始账号密码均为 ...
- closed channel
func Test_chanel(t *testing.T) { c := make(chan int, 1) go func() { time.Sleep(time.Second * 3) clos ...
- C# 微信消息模板 发送
项目要用到微信提醒 ,加上调转到小程序页面,或者 指定url 用到 RestSharp.Senparc.Weixin 类库 一开始直接照着微信示例直接post进去 发现一直提示 47001 ,估计 ...
- Jquery DataTables 服务器后端分页 Ajax请求添加自定义参数.
项目使用AdminLTE(基于Bootstrap 二次开发的框架)作为开发框架. 使用DataTables 的时候部分页面需要传参 给后台做筛选过滤. 但是不知道怎么将DataTables的参数 和自 ...
- vue多页面项目搭建(vue-cli 4.0)
1.创建vue项目 cmd命令执行 vue create app (app 自定义的项目名) 一般都会选择后者,自己配置一下自己需要的选项(空格为选中) 这是我个人需要的一些选项,路由Router.状 ...