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]题解的更多相关文章

  1. CSP-S 模拟测试94题解

    T1 yuuustu: 可以对两边取对数,然后就转化为两个double的比较,时间复杂度$O(n)$ 然后我就用神奇0.4骗分水过 #include<bits/stdc++.h> usin ...

  2. CSP-S模拟测试 88 题解

    T1 queue: 考场写出dp柿子后觉得很斜率优化,然后因为理解错了题觉得斜率优化完全不可做,只打了暴力. 实际上他是可以乱序的,所以直接sort,正确性比较显然,贪心可证,然后就是个sb斜率优化d ...

  3. CSP-S 模拟测试92 题解

    话说我怎么觉得我没咕多长时间啊,怎么就又落了20多场题解啊 T1 array: 根据题意不难列出二元一次方程,于是可以用exgcd求解,然而还有一个限制条件就是$abs(x)+abs(y)$最小,这好 ...

  4. CSP-S 模拟测试57题解

    人生第一次A,B层一块考rank2,虽然说分差没几分,但还是值得纪念. 题解: T1 天空龙: 大神题,因为我从不写快读也没有写考场注释的习惯,所以不会做,全hzoi就kx会做,kx真大神级人物. T ...

  5. CSP-S 模拟测试 51 题解

    考试过程: 惯例先看一遍三道题,T1 一开始反应要求割点,但是这是有向图,肯定不能求割点,康了一下数据范围,有40%是树的,还不错,决定待会在打. 看T2 字符串题,完了我字符串最弱了,肯定只能打暴力 ...

  6. CSP-S 模拟测试 45 题解

    由于咕掉的题解太多了,所以只能趁改完不动题的时间,来补补坑qwq,还是太弱了. 考试过程: 到新机房的第一次考试,貌似海星? 第一题一开始就觉得是个贪心,但以为所有小怪兽都要打完,所以想复杂了,但后来 ...

  7. [CSP-S模拟测试97]题解

    A.小盆友的游戏 感觉题解解释的很牵强啊……还是打表找规律比较靠谱 对于每个人,它构造了一个期望函数$f(x)$,设它的跟班个数为$cnt[x]$,那么令$f(x)=2^{cnt[x]}-1$(??鬼 ...

  8. [CSP-S模拟测试96]题解

    以后不能再借没改完题的理由不写题解了…… A.求和 求$\sum \sum i+j-1$ 柿子就不化了吧……这年头pj都不考这么弱智的公式化简了…… 坑点1:模数不定,可能没有2的逆元,那么只要先把乘 ...

  9. [CSP-S模拟测试92]题解

    A.数列 显然每个数的答案是互相独立的,直接扩欧求解.我们需要最小化$ax+by=gcd(a,b)$中的$|x|+|y|$,而显然当x或y靠近0时答案可能最优,列个不等式求一下即可. 能$O(1)$千 ...

随机推荐

  1. Cisco基础(六):配置目前网络环境、项目阶段练习

    一.配置目前网络环境 目标: 一家新创建的IT公司,公司位于北京有80多台服务器 目前网络环境使用技术,通过端口映射技术将web服务器发布给Internet: 三层交换:汇聚接入层交换机 默认路由:实 ...

  2. 前端每日实战:58# 视频演示如何用纯 CSS 创作一只卡通鹦鹉

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/vrRmWy 可交互视频 此视频是可 ...

  3. 90、Tensorflow实现分布式学习,多台电脑,多个GPU 异步试学习

    ''' Created on 2017年5月28日 @author: weizhen ''' import time import tensorflow as tf from tensorflow.e ...

  4. Spring MVC请求参数绑定 自定义类型转化 和获取原声带额servlet request response信息

    首先还在我们的框架的基础上建立文件 在domian下建立Account实体类 import org.springframework.stereotype.Controller; import org. ...

  5. CMDB 调研报告

    基础概念 1.什么是CMDB CMDB——配置管理数据库,通过识别.控制.维护,检查企业的IT资源,从而高效控制与管理不断变化的IT基础架构与IT服务,并为其它流程,例如事故管理.问题管理.变更管理. ...

  6. 抓取猫眼TOP100的数据

    import requests import re import json from multiprocessing import Pool from multiprocessing import M ...

  7. CG-CTF misc部分wp

    将Misc剥离出来了,已完结(coding gay不想做了) MISC1,图种一听图种,现将图片的GIF改为zip,然后解压得到另一张动图看动图最后一句话为‘都深深的出卖了我’,得到 flag2, 丘 ...

  8. js函数方法

    /** * call()和apply * 这两个方法都是函数对象的方法,需要通过函数对象来调用 * 当对函数调用call()和apply()都会调用函数执行 * 在调用call()和apply()可以 ...

  9. 微信小程序の小程序事件流

    一.什么是事件? 事件是视图层到逻辑层的通讯方式:事件可以将用户的行为,反馈到逻辑层进行处理:事件可以绑定在组件上,触发事件后,就会执行逻辑层中对应的事件处理函数:事件对象可以携带额外信息. 二.事件 ...

  10. 深入理解java虚拟机JVM(下)

    深入理解java虚拟机JVM(下) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...