HDU 5745 La Vie en rose 字符串匹配(暴力)
生活随笔
收集整理的這篇文章主要介紹了
HDU 5745 La Vie en rose 字符串匹配(暴力)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目的意思是,任意相鄰的兩個字母都可以交換,你可以交換一組,也可以多組。這樣一來,有關相鄰的所有p的變形串也幾乎都能被生成出來了。
這題做起來挺氣人的!大家都是兩個for循環O(nm)暴力過的……昨天比賽的時候寫的是所以直接判斷一下s子串,s[k]能否與p[j],p[j-1],p[j+1]中的一個相匹配,再check一下p串字母被匹配的次數。 O(n*(26+m)),無情TLE。
今天網上搜下題解,我勒個艸,思路是一樣的,寫的比我復雜多了,for里面的東西比我還多,結果AC了。
昨晚躺床上想了一下,可以不用check使用的次數。只要從左到右順序匹配過去就可以了,具體看代碼。
但是一開始又是無情WA好幾次!!!
/* *********************************************** Author :angon ************************************************ */ #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <stack> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; #define REP(i,k,n) for(int i=k;i<n;i++) #define REPP(i,k,n) for(int i=k;i<=n;i++) #define scan(d) scanf("%d",&d) #define scann(n,m) scanf("%d%d",&n,&m) #define mst(a,k) memset(a,k,sizeof(a)); #define LL long long #define maxn 1005 #define mod 100000007char s[100005],p[100005]; //int vis[27],vis2[27]; int main() {//freopen("1012.txt","r",stdin);// freopen("out.txt","w",stdout);int t,n,m,flag;scan(t);while(t--){scann(n,m);scanf("%s %s",s,p);for(int i=0;i<n-m+1;i++){flag=0;for(int j=0,k=i;j<m;j++,k++){if(s[k]==p[j]){continue;}else if(s[k]==p[j+1] && s[k+1]==p[j]){k++;j++;}//else if(j>=1 && s[k]==p[j-1] && s[k-1]==p[j])//{// 把第55行去掉加62行會錯,但沒想出來會錯的例子,唉。// }else{putchar('0');flag=1;break;}}if(!flag)putchar('1');}for(int i=n-m+1;i<n;i++)putchar('0');putchar('\n');}return 0; }
總結
以上是生活随笔為你收集整理的HDU 5745 La Vie en rose 字符串匹配(暴力)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习——数据降维和相关性分析
- 下一篇: 普通话智能测试系统软件,普通话智能学习软