# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
121504 |
2019-06-26T15:23:52 Z |
OptxPrime |
Ispit (COCI19_ispit) |
C++11 |
|
2000 ms |
1280 KB |
#include <iostream>
#include <cmath>
#include<vector>
#include <algorithm>
#include <utility>
#include<stack>
#include<queue>
using namespace std;
#define pb push_back
#define mp make_pair
#define ll long long
long long p[1010];
long long num[1010][26], tmp[1010][26];
long long h[1010], tmph[1010];
long long a=1000000007;
long long b=10000000009;
string st[1010];
int main()
{
int n,k;
cin>>n>>k;
p[0]=1;
for( int i=1;i<=n;i++ ) p[i]=( p[i-1] * a )%b;
for( int i=0;i<n;i++ ) cin>>st[i];
for( int i=0;i<n;i++ ){
string s=st[i];
for( int j=0;j<26;j++ ){
num[0][j]=0;
for( int pos=1;pos<=n;pos++ ){
num[pos][j] = num[pos-1][j]+ ( s[pos-1] == char( 'a'+j ) ); /// pos-1 jer je 1-indexiran pos
}
}
h[1]=s[0];
for( int j=2;j<=n;j++ ) h[j] = ((( h[j-1]*a )%b) + s[j-1]%b)%b; /// heshiramo ovaj string
for( int dokle=i+1;dokle<n;dokle++ ){ /// sad kroz sve druge stringove, za svaki nadjemo num i hash
string s=st[dokle];
for( int j=0;j<26;j++ ){
tmp[0][j]=0;
for( int pos=1;pos<=n;pos++ ){
tmp[pos][j] = tmp[pos-1][j]+ ( s[pos-1] == char( 'a'+j ) ); /// pos-1 jer je 1-indexiran pos
}
}
tmph[1]=s[0];
for( int j=2;j<=n;j++ ) tmph[j] = ((( tmph[j-1]*a )%b) + s[j-1])%b; /// heshiramo ovaj string
///sad ide trazenje max prefixa i suffixa i ostalo, binarnom
int lo=1,hi=n,mid,pref=0,suff=n+1;
while( lo<=hi ){ ///prefix
mid=lo+(hi-lo)/2;
if( h[mid] == tmph[mid] ){
lo=mid+1;
pref=max( pref, mid );
}
else hi=mid-1;
}
lo=1,hi=n;
while( lo<=hi ){ ///suffix - TRENUTNO NJEGA NE NADJE DOBRO
mid=lo+(hi-lo)/2;
long long val1 = ( h[n]-(h[mid-1]*p[n-mid+1])%b);
long long val2=( tmph[n]-(tmph[mid-1]*p[n-mid+1])%b );
while( val1 <0 ) val1+=b; /// ako padnu ispod nule
while( val2<0 ) val2+=b;
val1%=b;
val2%=b;
/// cout<< i << " " << dokle << " " << val1 << " " <<val2 << " ramize " << h[n] <<endl;
if( val1==val2 ){
hi=mid-1;
suff=min( suff,mid );
}
else lo=mid+1;
}
if( pref >=suff ){
cout<<"DA"<<endl;
return 0;
}
/// cout << i << " " << dokle << " " <<suff << " " << pref << endl;
if( suff-pref-1 > k ) continue; /// mora biti najvise k razlicitih koje cemo permutirati
bool is=true;
for( int j=0;j<26;j++ ){
if( num[suff-1][j]- num[pref][j] != tmp[suff-1][j]-tmp[pref][j] ){
is=false;
break;
}
}
if( is ){
cout<<"DA"<<endl;
return 0;
}
}
}
cout <<"NE"<<endl;
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Correct |
3 ms |
384 KB |
Output is correct |
3 |
Correct |
2 ms |
356 KB |
Output is correct |
4 |
Correct |
2 ms |
384 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Incorrect |
2 ms |
384 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Correct |
2 ms |
384 KB |
Output is correct |
3 |
Incorrect |
2 ms |
384 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
284 ms |
512 KB |
Output is correct |
2 |
Incorrect |
281 ms |
584 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
285 ms |
596 KB |
Output is correct |
2 |
Incorrect |
289 ms |
580 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
311 ms |
512 KB |
Output is correct |
2 |
Correct |
201 ms |
512 KB |
Output is correct |
3 |
Correct |
323 ms |
632 KB |
Output is correct |
4 |
Incorrect |
291 ms |
632 KB |
Output isn't correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
291 ms |
632 KB |
Output is correct |
2 |
Incorrect |
283 ms |
632 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
2054 ms |
1280 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
2056 ms |
1280 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
2048 ms |
1280 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |