QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#39073 | #1276. String Distance | Jamiiiiii | WA | 3ms | 5616kb | C++11 | 2.2kb | 2022-07-08 13:03:58 | 2022-07-08 13:04:00 |
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 ;
}
}
if( dy[wz][ans] < t1 ) return -1 ;
if( dy[wz][ans] > t2 ) return -1 ;
return ans ;
}
inline int read()
{
int x=0,f=1;char ch=getchar();
while( ch < '0' || ch > '9' ){if(ch == '-') f = -1; ch = getchar(); }
while( ch >= '0' && ch <= '9'){x = (x<<3) + (x<<1) + ch-'0'; ch = getchar(); }
return x*f;
}
void print(int x)
{
if( x < 0 ) putchar('-'), x = -x;
if( x > 9 ) print(x / 10);
putchar( x % 10 + '0' );
}
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] ++ ;
}
}
}
q = read();
for( int i = 0 ; i < q ; i ++ )
{
memset( dp , -1 , sizeof(dp) ) ;
t1 = read(); t2 = read();
t1 -- ;
t2 -- ;
dp[0][0] = t1 ;
int tmp = ef( t1 , t2 , 0 ) ;
if( tmp != -1 ) dp[0][1] = dy[0][tmp] + 1 ;
for( int i1 = 1 ; i1 < lb ; i1 ++ )
{
for( int j = 0 ; j <= i1 + 1 ; j ++ )
{
dp[i1][j] = dp[i1 - 1][j] ;
if( j != 0 )
{
if( dp[i1 - 1][j - 1] != -1 )
{
int tmp = ef( dp[i1 - 1][j - 1] , t2 , i1 ) ;
if( tmp != -1 )
{
tmp = dy[i1][tmp] ;
if( dp[i1][j] == -1 || dp[i1][j] > tmp )
{
dp[i1][j] = tmp + 1 ;
}
}
}
}
}
}
int ans = 0 ;
for( int i1 = lb ; i1 >= 0 ; i1 -- )
{
if( dp[lb - 1][i1] != -1 )
{
ans = i1 ;
break ;
}
}
print( t2 - t1 + 1 - ans + lb - ans ) ;
}
}
return 0 ;
}
详细
Test #1:
score: 0
Wrong Answer
time: 3ms
memory: 5616kb
input:
1 qaqaqwqaqaq qaqwqaq 3 1 7 2 8 3 9
output:
420
result:
wrong answer 1st lines differ - expected: '4', found: '420'