<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      「TAOI-2」Break Through the Barrier 題解

      前言:比賽前去做牙齒矯正,回來晚了 10 分鐘……做比賽的運氣全用在了一路綠燈上了(無語)。第二題切了兩個半小時。決定寫篇題解來抒發一下再記得憤怒愉悅之情。

      AC 的想法很簡單,就是表示出每一串連續的 \(\texttt{T}\),其長度分別為 \(l_1 \sim l_m\)。明顯的,對于任何一個 \(l_i\),在一系列操作后,它的長度頂多加 \(2\),也就是左邊多一個,右邊多一個。明顯的貪心,將 \(\texttt{T}\) 子串按長度從大到小排,然后只要枚舉到 \(l_i < ans-1\),就可以結束了。因為它既是加兩個,也只能等于 \(ans\)。然后每次更新 \(ans\)。

      對于判斷左右是否能增加一個,不是只判斷有沒有 \(\texttt{BTTB}\) 那么簡單。拿左邊來說,他可能長這樣:

      \[\texttt{(BTTBTBTBTB)TTTTTTT} \]

      他可以一路猛操作變成:

      \[\texttt{(TBBTBTBTBT)TTTTTTT} \]

      我嗎,蠢蠢地使用了暴力,然后喜提 \(2\mathcal{WA}+4\mathcal{TLE}\)。加個記憶化,喜提 \(2\mathcal{WA}\)。

      兩次的翻車記錄在這里:4TLE+2WA2WA。

      為什么呢?因為這個樣例:\(1 \texttt{B}\),要特判一下。(大概也只有我會漏掉這個樣例的情況吧,悲。)

      \(\mathcal{AC} \texttt{CODE}\)

      #include <bits/stdc++.h>
      using namespace std;
      
      int T,n,cnt;
      struct Node {
      	int l,r,mm;
      	Node(int L=0,int R=0,int m=0) {
      		l=L,r=R,mm=m;
      		return ;
      	}
      	friend bool operator <(const Node a,const Node b) {
      		return a.mm>b.mm;
      	}
      };
      const int MS=100005;
      Node node[MS];
      char s[MS];
      int pr[MS][2];
      bool GO(int p,int drct) {
      	if(p<1||p>n-1) return 0;
      	if(pr[p][drct-1]!=-1) return pr[p][drct-1];
      	if(drct&1) {
      		if(p>2&&s[p]=='B'&&s[p-1]=='T'&&s[p-2]=='T'&&s[p-3]=='B') return pr[p][drct-1]=true;
      		if(s[p]=='B'&&s[p-1]=='T') return pr[p][drct-1]=GO(p-2,drct);
      	}
      	else {
      		if(p<n-3&&s[p]=='B'&&s[p+1]=='T'&&s[p+2]=='T'&&s[p+3]=='B') return pr[p][drct-1]=true;
      		if(s[p]=='B'&&s[p+1]=='T') return pr[p][drct-1]=GO(p+2,drct);
      	}
      	return pr[p][drct-1]=false;
      }
      
      int main() {
      	scanf("%d",&T);
      	while(T--) {
      		memset(pr,-1,sizeof(pr));
      		scanf("%d%s",&n,s);
      		int l=-1;
      		cnt=0;
      		for(int i=0;i<n;i++) {
      			if(s[i]=='B'&&l>=0) node[++cnt]=Node(l,i-1,i-l),l=-1;
      			if(s[i]=='T'&&l<0) l=i;
      		}
      		if(l>=0) node[++cnt]=Node(l,n-1,n-l);
      		if(cnt==0) {
      			printf("0\n");
      			continue;
      		}
      		sort(node+1,node+1+cnt);
      		int ans=node[1].mm;
      		for(int i=1;i<=cnt&&node[i].mm>=ans-1;i++) {
      			if(GO(node[i].l-1,1)) node[i].mm++;
      			if(GO(node[i].r+1,2)) node[i].mm++;
      			ans=max(ans,node[i].mm);
      		}
      		printf("%d\n",ans);
      	}
      	return 0;
      }
      

      為什么辣么簡單的暴力題要切兩個半小時呢?因為我一直往 DP 和暴搜上考慮,浪費了兩個小時。警鐘長鳴。

      posted @ 2023-08-20 19:48  LinkCatTree  閱讀(57)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 丁香五月激情图片| 麻豆精品传媒一二三区| 韩国av无码| 国产午夜在线观看视频| 无码伊人66久久大杳蕉网站谷歌| 亚洲精品一二三四区| 香蕉EEWW99国产精选免费| 成人免费无码不卡毛片| 最新偷拍一区二区三区| 最近2019中文字幕免费看| 亚洲精品香蕉一区二区| 99中文字幕精品国产| 国产免费无遮挡吃奶视频| 日韩精品成人一区二区三| 精品无码国产不卡在线观看| 国产精品久久久久久无毒不卡| 亚洲线精品一区二区三区| 99热国产成人最新精品| 麻豆国产成人av高清在线| 国产喷水1区2区3区咪咪爱AV| 国产亚洲一区二区三区成人| 日韩一区二区三区日韩精品| 日本va欧美va精品发布| 国产精品麻豆中文字幕| 色哟哟www网站入口成人学校| 国产绿帽在线视频看| 国产亚洲精品AA片在线播放天 | 亚洲欧洲精品日韩av| 亚洲精品综合久中文字幕| 欧美激情一区二区三区成人 | 龙井市| 津南区| 久久久av男人的天堂| 日韩不卡1卡2卡三卡网站| 国产成人片无码视频在线观看| 国产真人无遮挡免费视频 | 人人妻人人澡人人爽人人精品电影| 丰满熟妇人妻av无码区| 91青青草视频在线观看| 色悠悠国产精品免费在线| 国产va免费精品观看精品|