本文共 666 字,大约阅读时间需要 2 分钟。
突破口:
原本思路是将每个key的首个数字去与全文进行暴力匹配,如果匹配到数字相同了,再进行key后面的数字的匹配,但这样超时了。不过这种想法还是可取的, 我们可以事先将0-9这10个数字出现的所有位置记录下来,则假如key的首数字为7,就可以直接找到7的位置,进行key后面数字的匹配,而不用从前往后遍历,去找数字7。这样可以省很多时间。代码如下:
#include#include #include #include #include using namespace std;typedef long long ll;const int maxn=1e5+5;char s[maxn],s0[maxn],s1[105],s1_[105],s1__[105],s2[105];struct number{ int cnt; int places[60005];}p[10]; //记录10个数字出现的位置struct key { int place; int numb;}num[10005]; //如果匹配到了key,则记录它首次出现的位置,以及它的编号bool cmp(key x,key y) //应题目要求,要依次输出先出现的key{ return x.place temp2+len) //匹配到了 { flag=1; break; } }//cout<<"flag"<<' '< <
转载地址:http://pddci.baihongyu.com/