QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#39073#1276. String DistanceJamiiiiiiWA 3ms5616kbC++112.2kb2022-07-08 13:03:582022-07-08 13:04:00

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-07-08 13:04:00]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:5616kb
  • [2022-07-08 13:03:58]
  • 提交

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'