[20190725NOIP模拟测试8]题解
Orz
T1
大水题,考场上看到题目中什么前几位相同末尾加字母莫名慌的一批
后来发现直接无脑哈希就能$O(n)$
KMP同样可切
仔细读题,数组别开小
#include<cstdio>
#include<iostream>
#include<cstring>
#define re register
using namespace std;
typedef unsigned long long ull;
const int N=,base=;
int T,la,lb;
ull power[N],ha[N],hb[N];
char A[N],B[N],ed[];
inline void ini()
{
for(int i=;i<=la;i++)
ha[i]=hb[i]=;
}
inline void work()
{
scanf("%d%d",&la,&lb);
scanf("%s",A+);
scanf("%s",ed);
ini();
for(re int i=;i<=lb;i++)
B[i]=A[i];
B[++lb]=ed[];
for(re int i=;i<=lb;i++)
hb[i]=hb[i-]*base+B[i];
for(re int i=;i<=la;i++)
ha[i]=ha[i-]*base+A[i];
//debug();while(1);
int ans=;
for(re int i=;i<=min(la,lb);i++)
{
if(i==)
{
if(A[]==B[lb])ans=;
continue;
}
if(ha[i]==hb[lb]-hb[lb-i]*power[i])
ans=max(ans,i);
//cout<<geta(1,i)<<' '<<getb(lb-i+1,lb)<<endl;
}
printf("%d\n",ans); }
int main()
{
scanf("%d",&T);
power[]=;
for(re int i=;i<=N;i++)
power[i]=power[i-]*base;
while(T--)work();
return ;
}
T2
画画图可以发现,所谓“必经之路”就是删去后使1和n不联通的点
那么这些点一定是原图的割点,同时满足删掉后1和n不再联通
于是大概思路就出来了:跑$Tarjan$,再乱搞满足第二个条件
不难发现,要满足后者,当且仅当n在所求得割点的搜索树子树上
那么这个条件反映到$Tarjan$算法上是什么呢?
即对于割点x,存在与它相连的点y,满足$dfn[y] \leq dfn[n]$
为什么?
考虑$dfn[]$的实际含义:每个点被访问的时间戳,我们可以用它判断点被访问的先后
如果y与n位于不同子树(不成立情况):
先访问n再访问y:显然$dfn[y]>dfn[x]$,不满足
反之:$dfn[y]$已更新而$dfn[n]$未更新,也不满足
如果y与n同树:
y在n前/y即为n:成立
n在y前(不成立):显然此时$dfn[y]>dfn[n]$,不满足
命题得证。
inline void tarjan(int x)
{
low[x]=dfn[x]=++ind;
int flag=;
for(int i=head[x];i;i=nxt[i])
{
if(!dfn[to[i]])
{
tarjan(to[i]);
low[x]=min(low[x],low[to[i]]);
if(low[to[i]]>=dfn[x])
{
flag++;
if((x!=||flag>)&&dfn[to[i]]<=dfn[n])iscut[x]=;
}
}
else low[x]=min(low[x],dfn[to[i]]);
}
}
还有一个问题:如果单想到要让n在割点的子树里,很容易写成dfn[x]<dfn[n]
然额实际上是不行的,会获得30分的好成绩(雾
为什么呢?
如果n位于由x出发的一条返祖路径上就完蛋了。
可以自己画图玩一下。
T3
玄学题,点我看大佬题解
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=;
const ll inf=0x7fffffffffff;
int T;
char str[N];
int s[N<<],cnt[N<<],len;
ll val[N<<];
void ini()
{
for(int i=;i<=len*;i++)
s[i]=cnt[i]=val[i]=;
}
void work()
{
ll ans=inf;
scanf("%s",str+);
len=strlen(str+);
ini();
for(int i=;i<=len;i++)
s[i]=s[i+len]=(str[i]=='B'?:);
/*for(int i=1;i<=(len<<1);i++)
cout<<s[i];*/
for(int i=;i<=(len<<);i++)
cnt[i]=cnt[i-]+s[i],val[i]=val[i-]+i*s[i];
int p=;
for(int i=;i<=len;i++)
{
ll res=inf;
for(int j=p;j<=i+len+;j++)
{
ll lnum=cnt[j-]-cnt[i-];
ll rnum=cnt[i+len-]-cnt[j-];
ll sum=(val[j-]<<)-val[i-]-lnum*i+rnum*1LL*(i+len-)-val[i+len-]-(lnum-)*lnum/-(rnum-)*rnum/;
if(sum>res)break;
res=sum,p=j;
ans=min(ans,res);
}
}
cout<<ans<<endl;
}
int main()
{
//cout<<0x7fffffffffff<<endl;while(1);
scanf("%d",&T);
while(T--)work();
return ;
}
[20190725NOIP模拟测试8]题解的更多相关文章
- CSP-S 模拟测试94题解
T1 yuuustu: 可以对两边取对数,然后就转化为两个double的比较,时间复杂度$O(n)$ 然后我就用神奇0.4骗分水过 #include<bits/stdc++.h> usin ...
- CSP-S模拟测试 88 题解
T1 queue: 考场写出dp柿子后觉得很斜率优化,然后因为理解错了题觉得斜率优化完全不可做,只打了暴力. 实际上他是可以乱序的,所以直接sort,正确性比较显然,贪心可证,然后就是个sb斜率优化d ...
- CSP-S 模拟测试92 题解
话说我怎么觉得我没咕多长时间啊,怎么就又落了20多场题解啊 T1 array: 根据题意不难列出二元一次方程,于是可以用exgcd求解,然而还有一个限制条件就是$abs(x)+abs(y)$最小,这好 ...
- CSP-S 模拟测试57题解
人生第一次A,B层一块考rank2,虽然说分差没几分,但还是值得纪念. 题解: T1 天空龙: 大神题,因为我从不写快读也没有写考场注释的习惯,所以不会做,全hzoi就kx会做,kx真大神级人物. T ...
- CSP-S 模拟测试 51 题解
考试过程: 惯例先看一遍三道题,T1 一开始反应要求割点,但是这是有向图,肯定不能求割点,康了一下数据范围,有40%是树的,还不错,决定待会在打. 看T2 字符串题,完了我字符串最弱了,肯定只能打暴力 ...
- CSP-S 模拟测试 45 题解
由于咕掉的题解太多了,所以只能趁改完不动题的时间,来补补坑qwq,还是太弱了. 考试过程: 到新机房的第一次考试,貌似海星? 第一题一开始就觉得是个贪心,但以为所有小怪兽都要打完,所以想复杂了,但后来 ...
- [CSP-S模拟测试97]题解
A.小盆友的游戏 感觉题解解释的很牵强啊……还是打表找规律比较靠谱 对于每个人,它构造了一个期望函数$f(x)$,设它的跟班个数为$cnt[x]$,那么令$f(x)=2^{cnt[x]}-1$(??鬼 ...
- [CSP-S模拟测试96]题解
以后不能再借没改完题的理由不写题解了…… A.求和 求$\sum \sum i+j-1$ 柿子就不化了吧……这年头pj都不考这么弱智的公式化简了…… 坑点1:模数不定,可能没有2的逆元,那么只要先把乘 ...
- [CSP-S模拟测试92]题解
A.数列 显然每个数的答案是互相独立的,直接扩欧求解.我们需要最小化$ax+by=gcd(a,b)$中的$|x|+|y|$,而显然当x或y靠近0时答案可能最优,列个不等式求一下即可. 能$O(1)$千 ...
随机推荐
- 大碗宽面Beta迭代阶段博客目录
大碗宽面Beta迭代阶段博客目录 Githhub:https://github.com/rz-2000/Course-Evaluation 一.Scrum Meeting 1. [第十周会议记录]ht ...
- <自动化测试>之<Selenium API 的用法1>
今天,简单,举例说一下在用python+selenium中元素定位的主要方法,第一部分是单个元素的操作,第二部分是一类元素的操作,实际操作中注意区分 #!/usr/bin/env python # - ...
- AcWing 231. 天码 (容斥)打卡
题目:https://www.acwing.com/problem/content/233/ 题意:给你n个不同的数,让你选取一个四元组,gcd为1,让你求这样的四元组数量是多少 思路:我们单独直接去 ...
- Emgucv图像处理工具
此工具是当年自己在学习Emgucv的时候,慢慢积累的,包含了常用的图像处理算法,非常适合新人学习,现放出源码,由于是以前做的,功能不全. 当时Emgucv的学习资料非常之少,没有一本书是讲Emgucv ...
- Mysql全文索引的使用
前言 在MySQL 5.6版本以前,只有MyISAM存储引擎支持全文引擎.在5.6版本中,InnoDB加入了对全文索引的支持,但是不支持中文全文索引.在5.7.6版本,MySQL内置了ngram全文解 ...
- POJ3641 Pseudoprime numbers (幂取模板子)
给你两个数字p,a.如果p是素数,并且ap mod p = a,输出“yes”,否则输出“no”. 很简单的板子题.核心算法是幂取模(算法详见<算法竞赛入门经典>315页). 幂取模板子: ...
- LeetCode题:旋转链表
原题: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2输出: ...
- git的使用(本地版本库)
1. 创建版本库 1.1 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: 1.2通过git init命令把这个目录变成Git可以管理的仓库(git进入空目录的路径) $ git i ...
- 转 python3 读取 ini配置文件
在代码中经常会通过ini文件来配置一些常修改的配置.下面通过一个实例来看下如何写入.读取ini配置文件. 需要的配置文件是: 1 [path] 2 back_dir = /Users/abc/Pych ...
- docker stack利用secrets启动wordpress
docker-compose文件 version: '3.1' services: web: image: wordpress ports: - : secrets: - my-pw environm ...