发现长时间鸽博客会导致 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. Drupal 远程代码执行漏洞(CVE-2019-6339)

    影响版本 Drupal core 7.62之前的7.x版本.8.6.6之前的8.6.x版本和8.5.9之前的8.5.x版本 poc https://github.com/thezdi/PoC/blob ...

  2. 网络安全日记 ① IIS 之web服务器搭建以及dns转发配置

    IIS(internet info server)服务器的搭建 创建iis服务 打开光驱 选择网络应用服务 安装iis和ftp(后面有讲) 配置服务 通过管理工具打开iis 2. 此时80端口就已经开 ...

  3. 蓝凌OA前台任意文件读取漏洞利用

    近期CNVD爆出漏洞编号:CNVD-2021-28277,首次公开日期为2021-04-15,蓝凌oa存在多个漏洞,攻击者可利用该漏洞获取服务器控制权.今天挑选一个蓝凌OA前台任意文件读取漏洞进行分析 ...

  4. Python实现多种SSH连接与文件传输

    Python实现SSH控制 使用Python进行基于口令认证的连接: 1 #加载paramiko包 2 import paramiko 3 #创建新的SSH对象 4 Client=paramiko.S ...

  5. C++通讯录管理系统(添加联系人,显示联系人,删除联系人,查找联系人,修改联系人,清空联系人,退出通讯录)

    1 /** 2 * ProjectNmae:通讯录管理系统 3 * 功能: 4 * 添加联系人:向通讯录添加新人 5 * 显示联系人:显示通讯录中的所有联系人信息 6 * 删除联系人:按照姓名进行删除 ...

  6. javaScript学习关于常用注册监听和对象的创建

    JS 中的自定义对象(扩展内容)                     Object 形式的自定义对象                       对象的定义:                    ...

  7. 安鸾CTF Writeup SSRF03

    SSRF03 题目URL: http://whalwl.host:2000/ 其中的弯路我就不多说了,直接上解题思路 方法和SSRF02类似都是找内网机器端口,继续用ssrf02 这道题的方法:htt ...

  8. 手把手和你一起实现一个Web框架实战——EzWeb框架(四)[Go语言笔记]Go项目实战

    手把手和你一起实现一个Web框架实战--EzWeb框架(四)[Go语言笔记]Go项目实战 代码仓库: github gitee 中文注释,非常详尽,可以配合食用 这一篇文章主要实现路由组功能.实现路由 ...

  9. STM32—ADC多通道采集电压

    文章目录 ADC详解 程序说明 函数主体 引脚配置 ADC和DMA配置 主函数 ADC详解 前面的博客中详细介绍了STM32中ADC的相关信息,这篇博客是对ADC内容的一个总结提升,ADC的详细介绍: ...

  10. Ubuntu完全卸载Docker步骤

    Ubuntu完全卸载Docker步骤:https://www.jianshu.com/p/c03044dbeaaf