NOIP 2017.10.27 總結+心得
阿新 • • 發佈:2018-12-23
世界真的很大
恭喜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的
所以說