1. 程式人生 > >洛谷八連測R6

洛谷八連測R6

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