洛谷八連測R6
阿新 • • 發佈:2017-10-30
etc 啟動 names 判斷 分離 cst -1 htm getc
本次測試暴0!!!還有兩周就要考試啦!!!
看題目時覺得難度不大,就直接寫正解,沒有參照數據,導致測出的結果和預想有較大差距。
不過得到經驗,不管題目難易(除了D1T1)都要參照數據一部分一部分寫,那範圍內的點。
廢話不多說,下面上題解:
T1.不可逆的重啟動
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=1e6+5; const int maxm=1e3+5; int a[maxn],b[maxn],head[30],nxt[maxn][30],f[maxm][maxm]; int main(){ int n=0,m=0; char ch; while(ch=getchar(),ch!=‘\n‘) a[++n]=ch-‘a‘; while(ch=getchar(),ch!=‘\n‘) b[++m]=ch-‘a‘; memset(head,0x3f,sizeof(head)); for(int i=n;i>=0;--i){ for(int j=0;j<26;++j) nxt[i][j]=head[j]; head[a[i]]=i; } memset(f,0x3f,sizeof(f)); for(int i=0;i<=m;++i) f[i][0]=0; for(int i=1;i<=m;++i) for(int j=1;j<=i;++j){ f[i][j]=f[i-1][j]; if(f[i-1][j-1]<=n) f[i][j]=min(f[i][j],nxt[f[i-1][j-1]][b[i]]); } int ans=0,l=0,r=m;//這兒暴力判斷也行的 while(l<=r){int mid=(l+r)>>1; if(f[m][mid]<=n){ans=mid; l=mid+1;} else r=mid-1; } printf("%d\n",ans); return 0; }
T2.分離喪失的既視感
T3.透明的星塵
部分題解參考自:
1.洛谷講解
2.http://www.cnblogs.com/huihao/p/7751560.html
洛谷八連測R6