2020 CCPC Wannafly Winter Camp Day5 E
题目
题目大意
\quad
给你序列
a
1
−
a
n
和
b
1
−
b
4
\ a_1 -a_n 和 b_1 - b_4
a1−an和b1−b4,问你有多少个a的子序列可以与b匹配
\quad
匹配的要求是子序列长度和匹配序列长度一样并且当有
b
i
=
b
j
的
时
候
,
a
i
=
a
j
,
(
1
≤
i
,
j
≤
4
)
\ b_i = b_j 的时候, a_i = a_j, (1\leq i, j \leq4)
bi=bj的时候,ai=aj,(1≤i,j≤4)
思路
\quad 题解说枚举前三个然后做到O(1)计算最后一个,我愣了 ,不会,然后 O ( n 4 ) \ O(n^4) O(n4)暴力枚举竟然……过了
代码
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
#include <vector>
#include <map>
#include <string>
#include <iostream>
#include <stdlib.h>
#include <deque>
using namespace std;
int num[350];
int main()
{
int i,j,k,l,t,n,m,ans,a,b,c,d;
scanf("%d",&n);
ans=0;
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
scanf("%d",&d);
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
if((a==b)!=(num[i]==num[j]))
continue;
for(k=j+1;k<=n;k++)
{
if((c==b)!=(num[k]==num[j]))
continue;
if((c==a)!=(num[k]==num[i]))
continue;
for(l=k+1;l<=n;l++)
{
if((d==c)!=(num[l]==num[k]))
continue;
if((d==b)!=(num[l]==num[j]))
continue;
if((d==a)!=(num[l]==num[i]))
continue;
++ans;
}
}
}
}
printf("%d",ans);
return 0;
}
太神秘了