我有int数组int[] A = {3, 5, 7, 3, 3, 5};
根据定义:
prefix_suffix_set是一对索引
(P, S)
,0 ≤ P
,S < N
这样:
- 序列
A[0], A[1], ..., A[P]
中出现的每个值也出现在序列A[S], A[S + 1], ..., A[N − 1]
中,- 序列
A[S], A[S + 1], ..., A[N − 1]
中出现的每个值也出现在序列A[0], A[1], ..., A[P]
中。
我的问题是:前缀后缀列表是哪个?
答案 0 :(得分:1)
C ++中的代码:
#include <iostream>
#include <set>
using std::set;
using std::cout;
using std::endl;
int main() {
int A[6] = { 3, 5, 7, 3, 3, 5 };
int countPS = 0;
for ( int i = 1; i <= 6; i++ ) {
set<int> P;
P.insert( A , A + i );
for ( int j = 5; j >= 0; j-- ) {
set<int> S;
S.insert( A + j, A + 6 );
if ( P == S )
countPS++;
}
}
cout << "The number of elements in list (P,S) = " << countPS << endl;
return 0;
}
节目输出:
Success time: 0 memory: 3476 signal:0
The number of elements in list (P,S) = 14
答案 1 :(得分:1)
可能的解决方案是:
(P,S) -- prefix set - suffix set
(1,4) -- {3,5} - {3,5}
(1,3) -- {3,5} - {3,5}
(2,2) -- {3,5,7} - {3,5,7}
由于不需要P <= S
,因此也允许这些(否则将被排除):
(2,1) -- the same as above, just having all the possibilities
(2,0) -- where P >= 2 and S <=2
(3,2)
(3,1)
(3,0)
(4,2)
(4,1)
(4,0)
(5,2)
(5,1)
(5,0)
因此,结果是具有上述元组的集合。我认为N
是6
,就像数组的大小一样。