世界真的很大
恭喜RNG
今天的考试要是再考炸真的要回家种田了
幸好还将就但是于我自己来讲还是有诸多不足之处
3道题都还有提升的空间,但是总是无法抓住,还是太弱啊
看题先:
1:
水题的典范
一开始一看以为有什么性质,可能真的有吧,反正我没发现
暴力构造b串,然后直接for去匹配
匹配用hash就好
wa一个点以为是卡hash,其实是数组开小了233,WA?
我的就是正解
还有一种做法是KMP求NXT,把b串接在a串后面就好
完整代码:
#include<stdio.h>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef unsigned long long unt;
const unt base=23;
int n,m,T,ans=0;
unt p[400010];
char s[400010],t[400010],tmp[10];
int main()
{
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
p[0]=1;
for(int i=1;i<=200010;i++) p[i]=p[i-1]*base;
scanf("%d",&T);
while(T--)
{
ans=0;
scanf("%d%d",&n,&m);
memset(s,0,sizeof(s));
memset(t,0,sizeof(t));
scanf("%s",s+1);
for(int i=1;i<=m;i++) t[i]=s[i];
scanf("%s",tmp);
t[++m]=tmp[0];
unt tmp1=0,tmp2=0;
for(int i=1,j=m;i<=n && j>=1;i++,j--)
{
tmp1=tmp1*base+s[i]-'a';
tmp2+=(t[j]-'a')*p[m-j];
if(tmp1==tmp2) ans=max(ans,i);
}
printf("%d\n",ans);
}
return 0;
}
/*
2
5 3
adabc
d
6 6
aaaaaa
a
*/
如果一道题想到了什么办法就算感觉很暴力只要能过且能写就应该马上去写
一来是节约时间,二来呢,有可能最正解的方法反而不好想而且不适合自己
考试的时候对于时间的把握还是很重要
2:
一句话题意,无向图两点之间所有必经点
当时一想,这些点首先一定要是割点,
想到TarjAn
然后对于每一个割点我们要判断其能不能把1和n分开
对于TaRjan既然在保证图连同的情况下肯定是从1开始DFS的
所以说