QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#39047 | #1276. String Distance | claes | WA | 3ms | 9884kb | C++ | 2.3kb | 2022-07-08 12:29:05 | 2022-07-08 12:29:07 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std ;
char a[100010] , b[25] ;
int dy[25][100010] ;
int dc[25] , la , lb ;
int q ;
int dp[25][25] ;//dp[a][b] = c: b匹配到a,匹配了b个,a最小匹配到c
inline int ef( int t1 , int t2 , int wz )//在a的t1、t2间找b[wz]
{
if( dc[wz] == 0 ) return -1 ;
int l = 0 , r = dc[wz] - 1 , mid , ans = dc[wz] - 1 ;
while( l <= r )
{
mid = ( l + r ) / 2 ;
if( dy[wz][mid] >= t1 )
{
ans = mid ;
r = mid - 1 ;
}
else
{
l = mid + 1 ;
}
}
// cout<< dy[wz][ans] << endl ;
if( dy[wz][ans] > t2 ) return -1 ;
return ans ;
}
int main ()
{
int t1 , t2 ;
int t ;
scanf( "%d" , &t ) ;
while( t -- )
{
memset( dc , 0 , sizeof(dc) ) ;
scanf( "%s" , &a ) ;
scanf( "%s" , &b ) ;
la = strlen(a) ;
lb = strlen(b) ;
// if( t == 9 )
// {
// for( int i = 0 ; i < lb ; i ++ )
// {
// cout<< b[i] ;
// }
// cout<< endl ;
// }
for( int i = 0 ; i < la ; i ++ )
{
for( int j = 0 ; j < lb ; j ++ )
{
if( a[i] == b[j] )
{
dy[j][dc[j]] = i ;
dc[j] ++ ;
}
}
}
scanf( "%d" , &q ) ;
for( int i = 0 ; i < q ; i ++ )
{
memset( dp , -1 , sizeof(dp) ) ;
scanf( "%d%d" , &t1 , &t2 ) ;
if( t == 9 && i == 322 )
{
cout<< t1 << ' ' << t2 << endl ;
return 0 ;
}
t1 -- ;
t2 -- ;
dp[0][0] = t1 ;
int tmp = ef( t1 , t2 , 0 ) ;
// cout<< "A" << tmp << ' ' << endl ;
if( tmp != -1 ) dp[0][1] = dy[0][tmp] + 1 ;
// cout<< dp[0][0] << ' ' << dp[0][1] << endl ;
for( int i = 1 ; i < lb ; i ++ )
{
for( int j = 0 ; j <= i + 1 ; j ++ )
{
dp[i][j] = dp[i - 1][j] ;
if( j != 0 )
{
if( dp[i - 1][j - 1] != -1 )
{
int tmp = ef( dp[i - 1][j - 1] , t2 , i ) ;
// cout<< tmp << endl ;
if( tmp != -1 )
{
tmp = dy[i][tmp] ;
if( dp[i][j] == -1 || dp[i][j] > tmp )
{
dp[i][j] = tmp + 1 ;
}
}
}
}
// cout<< dp[i][j] << ' ' ;
}
// cout<< endl ;
}
int ans = 0 ;
for( int i = lb ; i >= 0 ; i -- )
{
if( dp[lb - 1][i] != -1 )
{
ans = i ;
break ;
}
}
printf( "%d\n" , t2 - t1 + 1 - ans + lb - ans ) ;
}
}
return 0 ;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 5776kb
input:
1 qaqaqwqaqaq qaqwqaq 3 1 7 2 8 3 9
output:
4 2 0
result:
ok 3 lines
Test #2:
score: -100
Wrong Answer
time: 2ms
memory: 9884kb
input:
10 rtedxofnuatdpogdzftepqhlwiavwisshpvlcwdkzlccofacdisafkpzmppgdwahposjlgqxqdupksokprgaymznbtyuenyikazrmjonfqawzcmuaqowrizdortxplnogmntadqqpwgolfcyqswtncqldgkrmgbovkyaxsuqwzftujheouhiynkjbzdnnhmreheoawkkljxmiwghewmqvjvmywukckjzwvfnjomthjkvijujdksawjmfrrgmhvpqazesdmeyjvougzmhlxrqmdyripgomcrawinxmfiyr...
output:
21 22 23 24 25 26 27 28 29 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 61 62 63 64 65 64 65 66 67 68 69 70 71 72 73 74 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 92 93 94 95 96 95 96 97 98 99 100 101 102 103 102 1...
result:
wrong answer 323rd lines differ - expected: '321', found: '1 323'