/**//* 题意:给出一个串,求最小的一个正数,该数不能是该串的子串 len<=10^5 一个串的子串有C(len,2)个,感觉很多。但是长度越大,其串的个数会越小 长度为1时,串的个数高达10^5,只要不是特殊数据,绝对能把[0,9]这个区间铺满 同理 长度为2时,串的个数也高达10^5,也能把区间[0,99]铺满 长度为5时,串的个数10^5,有可能铺满区间[0,99999] 但长度为6时,串的个数10^5,绝对不可能铺满区间[0,999999]
所以枚举起点,枚举长度(1到6)将得到的整数标记visit过 最后从1开始(不是0),遇到第一个没被标记过的就是最小的正数了!
这题一开始估计的时候,子串好大! 但是细心推一下,发现长度越大,其个数越小,分布也越稀疏! 而我们就是要求那些稀疏的没被访问过的位置了 */ #include<cstdio> #include<cstring>
const int MAXN = 1000000;
bool vi[MAXN]; char str[MAXN];
int main() { //freopen("in","r",stdin); while(~scanf("%s",str)) { memset(vi,0,sizeof(vi)); for(int i=0;str[i];i++) { int tmp = 0; for(int j=1;j<=6&&str[i+j-1];j++) { tmp=10*tmp+str[i+j-1]-'0'; vi[tmp]=1; } } for(int i=1;i<MAXN;i++) if(!vi[i]){printf("%d\n",i);break;} } return 0; }
|
|
常用链接
随笔分类
Links
搜索
最新评论
|
|