[考试总结]noip模拟41
发现长时间鸽博客会导致 rp--,所以今天来补一补
这个题目其实不是很毒瘤,然而是非常毒瘤。。。
题目不说请就是非常非常的烦人
首先 \(T1\) 就整整有两个歧义的地方,也就是说我们一共有 \(4\) 种理解的方式。
非常恐怖
然后还有第四题,完全没看懂是个什么意思,然后 \(gg\) 了。
然后就是最让我伤心的 \(T2\) \(xin\)_\(team\) 打假。。。。。。。
非常伤心
你相信引力吗
我不相信题目
首先 任一 的意思不是任意一个,而是随意一个
nm
然后严格比 \(i\) 和 \(j\) 高不是比其中一个高,而是比这两个都高
nm
之后这个题目就是很明白了。
我们其实可以使用单调栈来维护其左右端点。
还需要一个栈来维护其变化量。
这个变化量是相同元素的变化量。
就是:
\]
之后就有了。。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define debug cout<<"debug"<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &s)
{
register bool f = 0;s = 0; register char ch = gc();
while(!isdigit(ch)) {f |= ch == '-'; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return s = f ? -s : s,*this;
}}io;
}
using namespace xin_io; static const int maxn = 1e7+10,inf = 1e9+7,mod = 998244353; const ll llinf = 1e18+7;
namespace xin
{
int st1[maxn],st2[maxn],top = 0,maxp = 0;
int a[maxn],n;
ll ans;
inline short main()
{
io >> n;
try(i,1,n)
{
io >> a[i]; a[n+i] = a[i];
if(a[i] > a[maxp]) maxp = i;
}
try(i,maxp,maxp+n-1)
{
while(top and st1[top] < a[i]) ++ ans,top--;
if(st1[top] > a[i]) ++ ans;
else ans += st2[top] + (a[i] != a[maxp]);
st1[++top] = a[i];
st2[top] = (a[i] == st1[top-1]) ? st2[top-1] + 1 : 1;
}
while(top > 2) {if(st1[top] == st1[2]) break; ++ ans,top--;}
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
marshland
好吧,我现在还是垃圾 \(10\) 分。
正解应该是 \(nb\) 网络流。
毒瘤建图。。
party?
大佬们简单的想法应该是网络流。
但这个属实不是正解。
正解使用 \(bitset\) 进行模拟线段树。
之后还有一个什么霍尔定理关于二分图的完美匹配的东东。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define debug cout<<"debug"<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &x)
{
register type s = 0; register int f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return x = s * f,*this;
}}io;
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+7; const ll llinf = 1e18+7;
namespace xin
{
#define bian(l,r) ((l + r) | ((l) != (r)))
class xin_edge{public:int next,ver;}edge[maxn<<1];
int head[maxn],zhi = 0;
inline void add(int x,int y) {edge[++zhi].ver = y; edge[zhi].next = head[x]; head[x] = zhi;}
int top[maxn],siz[maxn],d[maxn],hson[maxn],id[maxn],rk[maxn],tot = 0,fa[maxn];
int n,m,a[maxn],qnum,q[maxn][11];
void dfs1(int x,int f)
{
d[x] = d[f] + 1; siz[x] = 1;
asm(i,x)
{
register int y = edge[i].ver;
if(y == f) continue;
dfs1(y,x);
siz[x] += siz[y];
if(siz[y] > siz[hson[x]]) hson[x] = y;
}
}
void dfs2(int x,int t)
{
top[x] = t; id[x] = ++tot; rk[tot] = x;
if(hson[x]) dfs2(hson[x],t);
asm(i,x)
{
register int y = edge[i].ver;
if(y == fa[x] or y == hson[x]) continue;
dfs2(y,y);
}
}
std::bitset<1024>bit1[maxn],bit2[maxn];
void dfs3(int x)
{
if(x != top[x]) bit1[x] = bit1[fa[x]];
bit1[x][a[x]] = 1;
asm(i,x) dfs3(edge[i].ver);
}
inline int lca(int x,int y)
{
while(top[x] xor top[y])
{
if(d[top[x]] < d[top[y]]) std::swap(x,y);
x = fa[top[x]];
}
if(d[x] > d[y]) return y; return x;
}
void build(int l,int r)
{
if(l == r)
{
bit2[bian(l,r)][a[rk[l]]] = 1;
return ;
}
register int mid = l + r >> 1;
build(l,mid); build(mid+1,r);
bit2[bian(l,r)] = bit2[bian(l,mid)] | bit2[bian(mid+1,r)];
}
std::bitset<1024> ask(int l,int r,int ql,int qr)
{
if(ql <= l and qr >= r) return bit2[bian(l,r)];
register int mid = l + r >> 1;
std::bitset<1024>ret;
if(ql <= mid) ret |= ask(l,mid,ql,qr);
if(qr > mid) ret |= ask(mid+1,r,ql,qr);
return ret;
}
inline std::bitset<1024> query(int x,int goal)
{
std::bitset<1024>ret;
while(top[x] xor top[goal])
{
ret |= bit1[x];
x = fa[top[x]];
}
ret |= ask(1,n,id[goal],id[x]);
return ret;
}
inline short main()
{
io >> n >> m >> qnum;
try(i,2,n)
{
io >> fa[i];
add(fa[i],i);
}
try(i,1,n) io >> a[i];
dfs1(1,0); dfs2(1,1);
try(i,1,qnum)
{
io >> q[i][0];
try(j,1,q[i][0]) io >> q[i][j];
}
dfs3(1); build(1,n);
try(i,1,qnum)
{
int allca = lca(q[i][1],q[i][2]);
try(j,3,q[i][0]) allca = lca(allca,q[i][j]);
std::bitset<1024>temp[11];
try(j,1,q[i][0]) temp[j] = query(q[i][j],allca);
// try(j,1,q[i][0]) try(k,1,q[i][0]) cout<<temp[j][k];
// cout<<endl;
int ans = m,cnt = 0;
for(int s=1;s<(1<<q[i][0]);s++)
{
int cnt=0;
temp[0].reset();//jb(ans);
for(int j=0;j<q[i][0];j++)
if(s&(1<<j))
{
temp[0]|=temp[j+1];
cnt++;
}
ans=std::min(ans,(int)temp[0].count()/cnt);
}
cout<<ans * q[i][0]<<endl;
}
return 0;
}
}
signed main() {return xin::main();}
半夜
题目说明真的是垃圾。
这到题目实际上就是让我们求出一个最长循环上升子序列
然后这个玩意可以 \(\mathcal O(n^2)\) 求。
证明很毒瘤
放个码吧,细节很多。。
#include<bits/stdc++.h>
using std::cout; using std::endl;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define sb(x) cout<<#x" = "<<' '
#define jb(x) cout<<#x" = "<<endl
#define debug cout<<"debug"<<endl
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &x)
{
register type s = 0; register int f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return x = s * f,*this;
}}io;
#define scanf ak = scanf
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+7; const ll llinf = 1e18+7;
namespace xin
{
char s1[maxn],s2[maxn];
int n;
int f1[2010][4010],f2[2010][4010];
inline short main()
{
scanf("%d",&n);
scanf("%s%s",s1+1,s2+1);
try(i,1,n) s2[i+n] = s2[i];
try(i,1,(n << 1)) f1[0][i] = i;
try(i,1,n)
try(j,1,(n<<1))
{
register int x = f1[i-1][j],y = f2[i][j-1];
if(s1[i] != s2[j] and x > y)
f1[i][j] = x,f2[i][j] = y;
else f1[i][j] = y,f2[i][j] = x;
}
int ans = 0;
// try(i,1,n) {try(j,1,(n<<1)) cout<<f1[i][j]<<' '; cout<<endl;}
try(i,1,n)
{
int temp = 0;
try(j,i,n+i-1) if(i > f1[n][j]) temp ++;
ans = std::max(ans,temp);
}
cout<<ans<<endl;
return 0;
}
}
signed main() {return xin::main();}
[考试总结]noip模拟41的更多相关文章
- 2021.8.16考试总结[NOIP模拟41]
T1 你相信引力吗 肯定是单调栈维护.但存在重复值,还是个环,不好搞. 发现取区间时不会越过最大值,因此以最大值为断点将环断为序列.在栈里维护当前栈中有多少个与当前元素相等的元素,小分类讨论一下. 最 ...
- 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]
6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...
- 5.23考试总结(NOIP模拟2)
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...
- 5.22考试总结(NOIP模拟1)
5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...
- 2021.9.17考试总结[NOIP模拟55]
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...
- [考试总结]noip模拟23
因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...
- 「考试」noip模拟9,11,13
9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...
- 6.11考试总结(NOIP模拟7)
背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...
- 6.10考试总结(NOIP模拟6)
前言 就这题考的不咋样果然还挺难改的.. T1 辣鸡 前言 我做梦都没想到这题正解是模拟,打模拟赛的时候看错题面以为是\(n\times n\)的矩阵,喜提0pts. 解题思路 氢键的数量计算起来无非 ...
随机推荐
- 数据结构算法学习之队列(数组模拟java实现)
数组模拟队列 数组模拟队列 今天学习数组模拟队列.队列常用于生活中的方方面面.比如银行叫号排队.实际上就是队列.所有人抽号排队.先去的先抽号.所以靠前的号最后会先被叫到然后出队.后边的会随之往前移位. ...
- UE4点选源码分析
在UE插件开发中,时常会用到场景预览窗口的功能,也经常会有点选场景里的物体而同步改变工具界面的需求,网上教程多为讲解如何打开一个预览界面.在最近的一次需求开发中,我粗读了关卡编辑器和蓝图编辑器的Vie ...
- [GXYCTF2019]Ping Ping Ping(ping命令执行绕过Waf)
记一道ping注入的题.过滤了很多字符. 分析 简单的测了一下,很容易就拿到了flag.php和index.php. 但是存在waf无法直接查看.直接?ip=127.0.0.1|cat flag.ph ...
- 自动化可用到的Java读取Excel文件指定的行列数据
前言 在做接口自动化的时候,通常会遇到数据取用及存放的问题,一般有三种方式可选择 1.数据库存取 2.表格存取 3.项目配置文件存取 这里仅展示下第二种方式表格取数据的 示例 import org.a ...
- Git常见的操作及命令
Git的下载安装 安装直接去Git官方网站https://git-scm.com/下载后安装即可. Git常用命令 git init初始化本地仓库(没有仓库就创建) git clone克隆远程仓库到本 ...
- .NetCore+Envoy+Id4+Dapr+EFCore 构建微服务之Envoy
.NetCore比较流行的微服务应该时是用Ocelot的方式构建微服务,纯配置化,开发量也比较小.但是做过一些项目之后发现这个方式不是很适合,首先它比较笨重,其次不支持gRpc和webSocket通信 ...
- 新手安装eclipse或idea后进行配置、快捷键、插件总结
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- 手把手和你一起实现一个Web框架实战——EzWeb框架(五)[Go语言笔记]Go项目实战
手把手和你一起实现一个Web框架实战--EzWeb框架(五)[Go语言笔记]Go项目实战 代码仓库: github gitee 中文注释,非常详尽,可以配合食用 本篇代码,请选择demo5 中间件实现 ...
- SQL注入:基本查询原理
SQL注入概述 sql注入不需要精通sql的各种命令,只需要了解几个命令并会使用即可. SQL注入:一种针对于数据库的攻击 现在的web网站都需要数据库的支持. SQL部分重要内容: 库:databa ...
- GIT-版本管理-初阶使用
目前我用的比较多的git指令 git clone -b [branch-name]: 拉取远程指定分支代码 git status: 查看工作区修改状态 在将修改添加进暂存区的时候需要git add . ...