[Cpp]
Description: an amazing question, not only requires memory-based search, but also requires high precision. Big Data is 10 ^ 100, which cannot be processed. It must be solved with a large number, and decimal times out.
# Include <cstdio>
# Include <cstring>
# Define N 100000000
Char str [2, 10010], s [2, 110];
Int v [110] [10010] [13], len [110] [10010];
Int max (int x, int y)
{
Return x> y? X: y;
}
Int main ()
{
// Freopen ("a.txt", "r", stdin );
Memset (len, 0, sizeof (len ));
Int t, n, m, p, flag;
Scanf ("% d", & t );
While (t --)
{
Scanf ("% s", str, s );
M = strlen (str );
N = strlen (s );
Memset (v, 0, sizeof (v ));
If (str [0] = s [0]) v [0] [0] [0] = 1;
Len [0] [0] = 1;
For (int I = 1; I <m; I ++)
{
Flag = 0;
Len [0] [I] = len [0] [I-1];
If (s [0] = str [I]) flag = 1;
For (int k = 0; k <len [0] [I-1]; k ++)
{
P = v [0] [I-1] [k] + flag;
V [0] [I] [k] = p % N;
Flag = p/N;
}
If (flag) v [0] [I] [len [0] [I] ++] = flag;
}
For (int I = 1; I <n; I ++)
For (int j = I; j <m; j ++)
If (s [I] = str [j])
{
Flag = 0;
Int count = max (len [I-1] [J-1], len [I] [J-1]);
For (int k = 0; k <count; k ++)
{
P = v [I-1] [J-1] [k] + v [I] [J-1] [k] + flag;
Flag = p/N;
V [I] [j] [k] = p % N;
}
Len [I] [j] = count;
If (flag) v [I] [j] [len [I] [j] ++] = flag;
}
Else
{
For (int k = 0; k <len [I] [J-1]; k ++) v [I] [j] [k] = v [I] [J-1] [k];
Len [I] [j] = len [I] [J-1];
}
Flag = len [n-1] [M-1]-1;
Printf ("% d", v [n-1] m-1] [flag]);
For (int I = flag-1; I> = 0; I --)
{
P = v [n-1] [M-1] [I];
If (p & gt; 9999999) printf ("% d", p );
Else if (p> 999999) printf ("0% d", p );
Else if (p> 99999) printf ("00% d", p );
Else if (p> 9999) printf ("000% d", p );
Else if (p> 999) printf ("0000% d", p );
Else if (p> 99) printf ("00000% d", p );
Else if (p> 9) printf ("000000% d", p );
Else printf ("0000000% d", p );
}
Puts ("");
}
Return 0;
}
Description: an amazing question, not only requires memory-based search, but also requires high precision. Big Data is 10 ^ 100, which cannot be processed. It must be solved with a large number, and decimal times out.
# Include <cstdio>
# Include <cstring>
# Define N 100000000
Char str [2, 10010], s [2, 110];
Int v [110] [10010] [13], len [110] [10010];
Int max (int x, int y)
{
Return x> y? X: y;
}
Int main ()
{
// Freopen ("a.txt", "r", stdin );
Memset (len, 0, sizeof (len ));
Int t, n, m, p, flag;
Scanf ("% d", & t );
While (t --)
{
Scanf ("% s", str, s );
M = strlen (str );
N = strlen (s );
Memset (v, 0, sizeof (v ));
If (str [0] = s [0]) v [0] [0] [0] = 1;
Len [0] [0] = 1;
For (int I = 1; I <m; I ++)
{
Flag = 0;
Len [0] [I] = len [0] [I-1];
If (s [0] = str [I]) flag = 1;
For (int k = 0; k <len [0] [I-1]; k ++)
{
P = v [0] [I-1] [k] + flag;
V [0] [I] [k] = p % N;
Flag = p/N;
}
If (flag) v [0] [I] [len [0] [I] ++] = flag;
}
For (int I = 1; I <n; I ++)
For (int j = I; j <m; j ++)
If (s [I] = str [j])
{
Flag = 0;
Int count = max (len [I-1] [J-1], len [I] [J-1]);
For (int k = 0; k <count; k ++)
{
P = v [I-1] [J-1] [k] + v [I] [J-1] [k] + flag;
Flag = p/N;
V [I] [j] [k] = p % N;
}
Len [I] [j] = count;
If (flag) v [I] [j] [len [I] [j] ++] = flag;
}
Else
{
For (int k = 0; k <len [I] [J-1]; k ++) v [I] [j] [k] = v [I] [J-1] [k];
Len [I] [j] = len [I] [J-1];
}
Flag = len [n-1] [M-1]-1;
Printf ("% d", v [n-1] m-1] [flag]);
For (int I = flag-1; I> = 0; I --)
{
P = v [n-1] [M-1] [I];
If (p & gt; 9999999) printf ("% d", p );
Else if (p> 999999) printf ("0% d", p );
Else if (p> 99999) printf ("00% d", p );
Else if (p> 9999) printf ("000% d", p );
Else if (p> 999) printf ("0000% d", p );
Else if (p> 99) printf ("00000% d", p );
Else if (p> 9) printf ("000000% d", p );
Else printf ("0000000% d", p );
}
Puts ("");
}
Return 0;
}