題目大意:
給出乙個字串,求」abcdefghi」的全排列中有幾個是該字串的子串行。
分析:該題需注意是計算全排列的中符合條件種類,而不是個數。其次,看到字串匹配的題目會先想到kmp,但是這題要匹配的是子串行,所以不要想太複雜,用字首和加二分的方法就能判斷子串行,該方法的效率是(logm)*n,其中n為9,而」abcdefghi」的全排只有362880個,所以最大所需的時間是362880*(log3000)*9=39191040,接近4k萬次,看起來很大,但經過優化,時間是202ms。
**:
#include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
char s[3000+5];
char ss[362880+5][10];
int a[3000+5][10];
int ef(int left,int right,int key,int x)
else
}return left;
}int ans=0;
void init()
ans++;
}while(next_permutation(num,num+9));
}int main()
}for(int i=0;ifor(int j=1;j<9;j++)
}if(flag) sum++;
}printf("%d\n",sum);
}return 0;
}
牛客網練習賽 拖公尺的咒語
托公尺沒有完成上乙個任務,準備施展黑魔法推倒 1317 黑魔法咒語被描述為乙個 長為 n 的,僅包含小寫英文本母 a i 的字串,在托公尺所在的星球,魔法造成的每次有效傷害都是來自他的乙個子串行,對於每乙個 a i 的排列 共 9 種 若作為咒語的子串行出現,就會造成 1 的傷害 暴力 includ...
牛客練習賽23 托公尺的遊戲 概率,期望
題目背景編不下去了 托公尺有一棵有根樹 t,樹根為1,每輪他會在剩下的子樹中等概率乙個點 u,砍掉 u 的子樹 包含 u 如果樹上的點都被砍光了,遊戲結束。求出這個遊戲進行的期望輪數,可以證明這個數一定是有理數,設他為 第一行輸入乙個數 n,表示 t 的點數,下面 n 1 行給出了 t 的每條邊一行...
牛客練習賽23 C 托公尺的位運算
point 首先明確,題目是讓我們從n個數中挑出k個數,他們 上之後的lowbit最大。在lowbit最大的前提下,k最大。遍歷答案v,即lowbit 2 v。for迴圈遍歷陣列,若在第v位存在1 二進位制 我們則肯定取這個數。因為最後k個數一起 後,如果存在答案,肯定是 xx100000這樣的形式...