比赛情况

1h才写出T1 100pts + T2 50pts(都是简单dp可还行)。然后就去颓废了。颓废完来康康T3的暴力,wow,T3咋这么难呢!?期望概率好像不太会了,退了吧qwq。

所以最后 100+50+0=150pts, rank 22。

比赛总结

  • 说实话比赛前还有些紧张呢,但是我这次吸取了经验,牢记dalao之前对我讲的,“花2h肝T1,T2是值得的。”(CSP-S就是因为花2h+肝T3暴力,让我留下了终身的遗憾),于是安心写T1,T2,稳扎稳打拿下150pts

  • 在这次比赛学到了一个简单的树状数组优化dp。

T1 0还是1

定义 f[i,0/1] 表示使用完前 i 个运算符后结果为 0/1 的方案总数,分当前位是 0还是1 讨论。

入门级别的dp题放在tgT1合不合适呢,我想放在 CSP-S D1T1 可能还合适吧qwq

Talk is cheap.Show me the code.

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {
int x=0,f=1; char ch=getchar();
while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
return x * f;
}
const int N = 1e7, MOD = 1e9+7;
int n;
int f[N][2];
char s[N];
signed main()
{
//freopen("a.in","r",stdin);
n = read();
scanf("%s",s+1);
f[0][0] = f[0][1] = 1;
for(int i=1;i<=n;++i) {
if(s[i] == '&') {
f[i][0] = (((2*f[i-1][0])%MOD) + f[i-1][1])%MOD;
f[i][1] = (f[i-1][1])%MOD;
} else if(s[i] == '|') {
f[i][0] = (f[i-1][0])%MOD;
f[i][1] = (((2*f[i-1][1])%MOD) + f[i-1][0])%MOD;
} else if(s[i]=='^') {
f[i][0] = (f[i-1][1] + f[i-1][0])%MOD;
f[i][1] = (f[i-1][0] + f[i-1][1])%MOD;
}
}
printf("%lld\n",f[n][1]%MOD);
return 0;
}

T2 摆动数列

首先我通过观察发现 x<y 的和 x>y 的可以分开讨论。

再接着设计一个dp,有点像最长上升子序列有木有?

考虑可以用树状数组维护一个高度的前缀最大值,累加上去。这样就达到了优化dp的效果。

时间复杂度 \(O(nlogn)\)

Talk is cheap.Show me the code.

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {
int x=0,f=1; char ch=getchar();
while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
return x * f;
}
const int N = 4e5+7;
int n,m,cnt;
int X[N],Y[N],b[N];
struct Tree_Data {
int d[N];
inline void Add(int x,int y) {
while(x <= m) {
d[x] = max(d[x],y); x += x&-x;
}
}
inline int Qmax(int x) {
int res = 0;
while(x > 0) {
res = max(res,d[x]); x -= x&-x;
}
return res;
}
}Tu,Td;
signed main()
{
//freopen("b.in","r",stdin);
n = read();
for(int i=1;i<=n;++i) {
X[i] = read(), Y[i] = read();
b[++cnt] = X[i], b[++cnt] = Y[i];
}
sort(b+1, b+1+cnt);
m = unique(b+1, b+1+cnt) - b - 1;
//printf("must test 'm' = %d\n",m);
for(int i=1;i<=n;++i) {
X[i] = lower_bound(b+1, b+1+m, X[i]) - b; Y[i] = lower_bound(b+1, b+1+m, Y[i]) - b;
//printf("for.%d ,X[i]=%d, Y[i]=%d\n",i,X[i],Y[i]);
if(X[i] < Y[i]) {
int now = Tu.Qmax(m-X[i]) + 1; Tu.Add(m-Y[i]+1,now);
} else {
int now = Td.Qmax(X[i]-1) + 1; Td.Add(Y[i],now);
}
}
printf("%lld\n",max(Tu.Qmax(m+1),Td.Qmax(m+1)));
return 0;
}

T3 星球大战

不会。等我变强了再把这题补起来。

牛客OI周赛13-提高组 比赛总结的更多相关文章

  1. 牛客OI周赛9-提高组题目记录

    牛客OI周赛9-提高组题目记录 昨天晚上做了这一套比赛,觉得题目质量挺高,而且有一些非常有趣而且非常清奇的脑回路在里边,于是记录在此. T1: 扫雷 题目链接 设 \(f_i\) 表示扫到第 \(i\ ...

  2. 牛客OI周赛8-提高组A-用水填坑

    牛客OI周赛8-提高组A-用水填坑 题目 链接: https://ac.nowcoder.com/acm/contest/403/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制: ...

  3. 牛客OI周赛7-提高组 B小睿睿的询问(ST打表)

    链接:https://ac.nowcoder.com/acm/contest/371/B来源:牛客网 小睿睿的n个妹纸排成一排,每个妹纸有一个颜值val[i].有m个询问,对于每一个询问,小睿睿想知道 ...

  4. 牛客OI周赛2-提高组

    A.游戏 链接:https://www.nowcoder.com/acm/contest/210/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语 ...

  5. 牛客OI周赛11-普及组 B Game with numbers (数学,预处理真因子)

    链接:https://ac.nowcoder.com/acm/contest/942/B 来源:牛客网 Game with numbers 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C+ ...

  6. 牛客OI周赛7-提高组 A 小睿睿的等式

    链接:https://ac.nowcoder.com/acm/contest/371/A来源:牛客网 小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n ...

  7. 牛客OI周赛7-普及组 解题报告

    出题人好评. 评测机差评. A 救救喵咪 二位偏序.如果数据范围大的话直接树状数组,不过才1000就\(O(n^2)\)暴力就ok了. #include <bits/stdc++.h> s ...

  8. 牛客OI周赛10-普及组-A眼花缭乱的街市-(加速+二分)

    https://ac.nowcoder.com/acm/contest/901/A 很简单的一道题,全场只有20+AC,卡时间.新学了cin加速语法和数组二分查找的函数调用. 知道有个读写挂,可以加速 ...

  9. 补比赛——牛客OI周赛9-普及组

    比赛地址 A 小Q想撸串 题目分析 普及T1水题惯例.字符串中找子串. Code #include<algorithm> #include<iostream> #include ...

随机推荐

  1. Activity 怎么和 Service 绑定,怎么在 Activity 中启动自己对应的 Service?

    Activity 通过 bindService(Intent service, ServiceConnection conn, int flags)跟 Service 进行绑定,当绑定成功的时候 Se ...

  2. Word模板替换

    package com.sisa.auweb.tools.bookmarkprocess; import org.apache.poi.openxml4j.opc.OPCPackage; import ...

  3. 重复执行用例(pytest-repeat)

    前言 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来.自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,或 ...

  4. MySQL 树形结构 根据指定节点 获取其所在全路径节点序列

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其所在全路径节点序列. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合进行逻辑处理,获取全路径节点序列. 2.直接自定义My ...

  5. 慕课网_Java Socket应用---通信是这样练成的

    第1章 网络基础知识 1-1 网络基础简介 (10:21) 第2章 Java 中网络相关 API 的应用 2-1 Java 中的 InetAddress 的应用 (08:10) import java ...

  6. 转·带你用实例理解C语言回调函数

    原文出处:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 前言: 如不懂函数指针,请先查阅关于函数指针内容的资料(h ...

  7. switch-case的选择用法

    企业发放的奖金根据利润提成.利润I低于或等于100000元的,奖金可提0.1:利润高于100000元,低于200000(100000<I<=200000)时,低于100000元的部分按10 ...

  8. python 并发编程 协程 gevent模块

    一 gevent模块 gevent应用场景: 单线程下,多个任务,io密集型程序 安装 pip3 install gevent Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步 ...

  9. [gym101981D][2018ICPC南京D题]Country Meow

    题目链接 题目大意是求三维空间可以包含$n$个点的最小圆半径. 如果有做过洛谷P1337就会发现这到题很模拟退火,所以就瞎搞一发. $PS:$注意本题时限$3$秒. #include<bits/ ...

  10. java 环境配置及开发工具

    1.下载JDK 网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2 安装jdk 3.安装好jdk后配置环境变 ...