[考试总结]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. 解题思路 氢键的数量计算起来无非 ...
随机推荐
- zabbix latest.php SQL注入漏洞(CVE-2016-10134)
Zabbix 2.2.14之前的版本和3.0.4之前的3.0版本 latest.php页面提取cookie中的zbx_sessionid的后16位 246c58ba963457ef http://19 ...
- 创建函数function
1.创建普通函数 function 函数名称(){ 函数体://封装的代码 } 函数名称()://调用函数 function getSum(){ for(var i=1,sum=0;i<=100 ...
- Electron 开发音视频
废话不多说,咱直接进入正题! 创建 Electron 项目 前提条件 在使用Electron进行开发之前,需要安装 Node.js. 要检查 Node.js 是否正确安装,请在您的终端输入以下命令: ...
- Android 自定义属性(attrs)、样式(Style)、主题(Theme)
Android 自定义属性(attrs).样式(Style).主题(Theme) https://www.cnblogs.com/dandre/p/4507024.html https://blog. ...
- netty系列之:基于流的数据传输
目录 简介 package和byte 手动组合 Byte的转换类 ReplayingDecoder 总结 简介 我们知道由两种数据的传输方式,分别是字符流和字节流,字符流的意思是传输的对象就是字符串, ...
- BUUCTF-[网鼎杯 2018]Fakebook(SSRF+联合注入绕Waf)
记一道SSRF配合SQL注入的题. 喜欢在做题之前扫一下网站的目录,扫到了robots.txt文件可以访问,拿到user.php.bak的源码.同时还有flag.php. <?php class ...
- 墙裂推荐!2020Android阿里&腾讯&百度&字节&美团校招面试汇总
基本情况 2021届硕士生,Android开发岗 此文主要是2020年年初春招实习的面试和正式校招面试经验汇总,最终校招拿到了腾讯,百度,美团等offer 主要包括阿里4面,腾讯实习4面和校招4面,字 ...
- git的基本操作命令与基础
本文针对window用户进行git操作 1.git是分布式版本控制系统,需要用户名和邮箱作为一个标识.在任何文件夹中点击右键,选择Git Bash Here ,配置全局用户名和邮件或者局部用户名和邮件 ...
- Mantis安装过程笔记
安装平台:Windows Server 2003 R2 Enterprise x64 Edition 软件: EasyPHP-5.3.6.1 mantisbt-1.2.6 安装过程: 首先安装Easy ...
- dubbo-admin管理控制台安装
拉项目切换分支到master git clone https://github.com/apache/dubbo-admin.git /var/tmp/dubbo-admin 打开项目修改配置 dub ...