QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#39061 | #1276. String Distance | Jamiiiiii | TL | 2ms | 3756kb | C++11 | 1.9kb | 2022-07-08 12:49:46 | 2022-07-08 12:49:47 |
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] < t1 || 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) ;
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 ) ;
t1 -- ;
t2 -- ;
dp[0][0] = t1 ;
int tmp = ef( t1 , t2 , 0 ) ;
if( tmp != -1 ) dp[0][1] = dy[0][tmp] + 1 ;
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 ) ;
if( tmp != -1 )
{
tmp = dy[i][tmp] ;
if( dp[i][j] == -1 || dp[i][j] > tmp )
{
dp[i][j] = tmp + 1 ;
}
}
}
}
}
}
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 ;
}
詳細信息
Test #1:
score: 100
Accepted
time: 2ms
memory: 3756kb
input:
1 qaqaqwqaqaq qaqwqaq 3 1 7 2 8 3 9
output:
4 2 0
result:
ok 3 lines
Test #2:
score: -100
Time Limit Exceeded
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...