发现长时间鸽博客会导致 rp--,所以今天来补一补

这个题目其实不是很毒瘤,然而是非常毒瘤。。。

题目不说请就是非常非常的烦人

首先 \(T1\) 就整整有两个歧义的地方,也就是说我们一共有 \(4\) 种理解的方式。

非常恐怖

然后还有第四题,完全没看懂是个什么意思,然后 \(gg\) 了。

然后就是最让我伤心的 \(T2\) \(xin\)_\(team\) 打假。。。。。。。

非常伤心

你相信引力吗

我不相信题目

首先 任一 的意思不是任意一个,而是随意一个

nm

然后严格比 \(i\) 和 \(j\) 高不是比其中一个高,而是比这两个都高

nm

之后这个题目就是很明白了。

我们其实可以使用单调栈来维护其左右端点。

还需要一个栈来维护其变化量。

这个变化量是相同元素的变化量。

就是:

\[\dbinom{n+1}{2}-\dbinom{n}{2}=n
\]

之后就有了。。

#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的更多相关文章

  1. 2021.8.16考试总结[NOIP模拟41]

    T1 你相信引力吗 肯定是单调栈维护.但存在重复值,还是个环,不好搞. 发现取区间时不会越过最大值,因此以最大值为断点将环断为序列.在栈里维护当前栈中有多少个与当前元素相等的元素,小分类讨论一下. 最 ...

  2. 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]

    6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...

  3. 5.23考试总结(NOIP模拟2)

    5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...

  4. 5.22考试总结(NOIP模拟1)

    5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...

  5. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  6. [考试总结]noip模拟23

    因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...

  7. 「考试」noip模拟9,11,13

    9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...

  8. 6.11考试总结(NOIP模拟7)

    背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...

  9. 6.10考试总结(NOIP模拟6)

    前言 就这题考的不咋样果然还挺难改的.. T1 辣鸡 前言 我做梦都没想到这题正解是模拟,打模拟赛的时候看错题面以为是\(n\times n\)的矩阵,喜提0pts. 解题思路 氢键的数量计算起来无非 ...

随机推荐

  1. 媒体应用视频超分AI神器!360P视频一键转换HD

    作为多媒体应用的开发者,你是否想为媒体播放器快速开发创新AI功能?例如: 在播放低画质视频过程中对其进行逐帧超分 让满屏飘飞的弹幕自动绕过画面的主体人物 HMS Core 6.0.0开放的多媒体管线服 ...

  2. 记一次 GitLab 的迁移过程

    目录 1. 迁移背景 2. GitLab 整体架构介绍 3. GitLab 安装 配置选择 安装方式选择 安装的网络区域 安装 GitLab GitLab 常用命令 配置管理员账号密码 4. 配置 G ...

  3. 「必知必会」最细致的 LinkedList 原理分析

    1.结构 1. 继承   该类继承自 AbstractSequentialList 这个是由于他是一个顺序的列表,所以说继承的是一个顺序的 List 2. 实现 这个类实现的接口比较多,具体如下: 首 ...

  4. 阿里三面Android开发岗都过了,但是无理由挂了,竟是HR骚操作?

    进入互联网大厂一般都是"过五关斩六将",难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈. 近日,某位程序员发帖称,自己去阿里面试Androi ...

  5. java使用Selenium操作谷歌浏览器学习笔记(一)

    下载安装 在淘宝镜像https://npm.taobao.org/mirrors/chromedriver/中下载与浏览器对应的版本 查看浏览器版本 点击查看谷歌浏览器版本 在IDEA项目中导入相关j ...

  6. .NET Core/.NET5/.NET6 开源项目汇总12:WPF组件库2

    系列目录     [已更新最新开发文章,点击查看详细] WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架,属于.NET Frame ...

  7. 【错误】element cannot be mapped to a null key

    element cannot be mapped to a null key的解决方法 报错: ERROR [o.a.c.c.C.[.[.[/sa].[dispatcherServlet]] - Se ...

  8. 对象 绑定关系 隐藏属性 property 继承

    绑定方法两种: 1.绑定给对象的 class Student(): country = 'CHINA' def __init__(self,name,age): self.name = name se ...

  9. NOIP 模拟 $25\; \rm string$

    题解 \(by\;zj\varphi\) 考虑对于母串的每个字符,它在匹配串中有多少前缀,多少后缀. 设 \(f_i\) 表示 \(i\) 位置匹配上的前缀,\(g_i\) 为后缀,那么答案为 \(\ ...

  10. Azkaban入门(启动一个Simple Example)

    Azkaban简介 azkaban是一个开源的任务调度系统 Azkaban是一套简单的任务调度服务,整体包括三部分webserver.dbserver.executorserver. 开发语言为Jav ...