CSES - E4590 2016 6 - Results
Submission details
Task:Matching
Sender:eax511
Submission time:2016-10-22 14:28:30 +0300
Language:C++
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.04 sdetails
#2ACCEPTED0.07 sdetails
#3ACCEPTED0.07 sdetails
#4ACCEPTED1.41 sdetails
#5ACCEPTED1.56 sdetails
#6ACCEPTED0.99 sdetails
#7--details
#8ACCEPTED0.17 sdetails
#9ACCEPTED4.61 sdetails
#10--details
#11--details
#12ACCEPTED5.07 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:37:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=p.size()+1;i<v.size();++i){
                                 ^
input/code.cpp:38:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(v[i]>=p.size())m.emplace_back(i-p.size());
                     ^

Code

#include <vector>
#include <string>
#include <iostream>
using namespace std;
bool cmpchr(char a,char b){return a!='#'&&b!='#'&&(a=='?'||b=='?'||a==b);}
vector<int> zAlgorithm(const std::string& S){
  //cout<<S<<'\n';
  int n=S.size();
  vector<int> ret(n,0);
  int L=0;
  int R=0;
  for(int i=1;i<n;++i){
    if(i>R){
      L=i;
      R=i;
      while(R<n&&cmpchr(S[R-L],S[R]))++R;
      ret[i]=R-L;
      --R;
    } else if(ret[i-L]<R-i+1)ret[i]=ret[i-L];
    else {
      L=i;
      R=i;
      while(R<n&&cmpchr(S[R-L],S[R]))++R;
      ret[i]=R-L;
      --R;
    }
  }
  return ret;
}
int main(){
  string p,s;
  cin>>p>>s;
  auto v = zAlgorithm(p+'#'+s);
  //for(auto& it : v)cout<<it<<' ';
  //cout<<'\n';
  std::vector<int> m;
  for(int i=p.size()+1;i<v.size();++i){
    if(v[i]>=p.size())m.emplace_back(i-p.size());
  }
  cout<<m.size()<<'\n';
  for(auto& it : m)cout<<it<<'\n';
}

Test details

Test 1

Verdict: ACCEPTED

input
a?b
aabb

correct output
2
1
2

user output
2
1
2

Test 2

Verdict: ACCEPTED

input
???hj?????bcg??c????f????p???l...

correct output
1
225711

user output
1
225711

Test 3

Verdict: ACCEPTED

input
kvioxrw?wrmrljtbkonrczszi?sxff...

correct output
1
318678

user output
1
318678

Test 4

Verdict: ACCEPTED

input
??????????????????????????????...

correct output
1
124684

user output
1
124684

Test 5

Verdict: ACCEPTED

input
???????????????????????b??????...

correct output
1
162249

user output
1
162249

Test 6

Verdict: ACCEPTED

input
??????????????????????????????...

correct output
1
61191

user output
1
61191

Test 7

Verdict:

input
??????????????????????????????...

correct output
200001
1
2
3
4
...

user output
(empty)

Test 8

Verdict: ACCEPTED

input
??????????????????????????????...

correct output
399901
1
2
3
4
...

user output
399901
1
2
3
4
...

Test 9

Verdict: ACCEPTED

input
??????????????????????????????...

correct output
390001
1
2
3
4
...

user output
390001
1
2
3
4
...

Test 10

Verdict:

input
??????????????????????????????...

correct output
300001
1
2
3
4
...

user output
(empty)

Test 11

Verdict:

input
??????????????????????????????...

correct output
300000
1
2
3
4
...

user output
(empty)

Test 12

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
390001
1
2
3
4
...

user output
390001
1
2
3
4
...