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. hdu 1540 Tunnel Warfare (线段树,维护当前最大连续区间)

    Description During the War of Resistance Against Japan, tunnel warfare was carried out extensively i ...

  2. 函数————swap

    swap(vec[i],vec[j]); 交换两个元素.

  3. js事件---同一个事件实现全选与反选功能

    背景: 点击头部按钮,实现全选与反选功能 1.绑定事件,把当前勾选状态传递给方法 $event <el-checkbox v-model="ModelCheckAll" cl ...

  4. ShellListView

    過濾ShellListView顯示的檔案 有關這方面的元件你可以在Win3.中找到相關元件 你可以使用四個元件搭配應該就可以你所需要的功能 DriveComboBox1.FilterComboBox1 ...

  5. JS-text节点模拟innerHTML属性

    # [在线预览](https://jsfiddle.net/1010543618/mz7ybu8g/2/) text 节点无 innerHTML 这个属性!!! 如果直接修改 text 节点的属性(d ...

  6. (转)spring ioc原理(看完后大家可以自己写一个spring)

    原文地址:https://blog.csdn.net/it_man/article/details/4402245 最近,买了本Spring入门书:spring In Action .大致浏览了下感觉 ...

  7. MVC路由解析---UrlRoutingModule

    文章引导 MVC路由解析---IgnoreRoute MVC路由解析---MapRoute MVC路由解析---UrlRoutingModule Area的使用 引言: 此文全文内容90%转自 一.前 ...

  8. oninput 事件 比较angular张的 ng-model指令 和 Vue中的 v-model指令

    oninput 事件在用户输入时触发. 该事件在 <input> 或 <textarea> 元素的值发生改变时触发. 提示: 该事件类似于 onchange 事件.不同之处在于 ...

  9. shell 删除除匹配字符串之外的所有文件夹

    file_dir=` -maxdepth - type d`for dir in $file_dirdo file_name=`basename $dir` if [ $file_name != &q ...

  10. JavaScript类型和语法

    JavaScript类型和语法 一.类型 1.内置类型(null.undefined.boolean.number.string.object.symbol(es6中新增))(除对象之外,其它统称为基 ...