題目描述
給出乙個正整數n,我們把1…n在k進製下的表示連起來記為s(n,k),例如s(16,16)=123456789abcdef10, s(5,2)=11011100101。現在對於給定的n和字串t,我們想知道是否存在乙個k(2 ≤ k ≤ 16),使得t是s(n,k)的子串。
輸入描述:
第一行乙個整數n(1 ≤ n ≤ 50,000)。
第二行乙個字串t(長度 ≤ 1,000,000)
輸出描述:
「yes"表示存在滿足條件的k,否則輸出"no」
示例1輸入複製8
01112
輸出複製
yes分析:
先按照題意把1-n的數字轉化為2-16進製制的字串,再用kmp來判斷是否t出現在字串中。或者用strstr()函式也可以來判斷。
注意:轉化k進製的時候,大於9的數字轉化為大寫字母a-f,並且轉化的時候需要倒敘存入目標字串。
kmp
#include
#define ll long long
using
namespace std;
const
int n =
1e6+10;
char a[n]
,b[n]
,c[n]
;int ne[n]
;void
get_ne()
else j=ne[j];}
}int
kmp(
int n)
if(j==l)
return1;
return0;
}int
main()
else c[
++t]
=y+'0'
; x=x/i;
}for
(int z=t;z>=
0;z--)}
b[++k]
='\0';if
(kmp
(k))}if
(f==1)
printf
("yes");
else
printf
("no");
return0;
}
strstr()函式
#include
#define ll long long
using
namespace std;
const
int n =
1e6+10;
char a[n]
,b[n]
,c[n]
;int
main()
else c[
++t]
=y+'0'
; x=x/i;
}for
(int z=t;z>=
0;z--)}
b[++k]
='\0';if
(strstr
(b,a)
!=null)}
if(f==1)
printf
("yes");
else
printf
("no");
return0;
}
牛客 13253 子串
給出乙個正整數n,我們把1 n在k進製下的表示連起來記為s n,k 例如s 16,16 123456789abcdef10,s 5,2 11011100101。現在對於給定的n和字串t,我們想知道是否存在乙個k 2 k 16 使得t是s n,k 的子串。第一行乙個整數n 1 n 50,000 第二行...
牛客NC13230 合併回文子串
題目鏈結 題目描述 輸入兩個字串a和b,合併成乙個串c,屬於a和b的字元在c中順序保持不變。如 abc 和 xyz 可以被組合成 axbycz 或 abxcyz 等。我們定義字串的價值為其最長回文子串的長度 回文串表示從正反兩邊看完全一致的字串,如 aba 和 xyyx 需要求出所有可能的c中價值最...
牛客題霸 研發 NC127 最長公共子串
本題鏈結 給定兩個字串str1和str2,輸出兩個字串的最長公共子串,如果最長公共子串為空,輸出 1。輸入 1ab2345cd 12345ef 返回值 2345 動態規劃問題 假設兩個字串長度為n m,具體分析其問題 最優子結構 如果知道 n 1 m 1 長度字串的最長公共子串s,則 n m 長度字...