2020 camp-day-e

题解

暴力就行(如果n 3000,那就要优化成 n^2

 1 #include <cstdio>
 2 
 3 #define RE register
 4 #define FOR(i,a,b) for(RE int i=a;i<=b;++i)
 5 #define ROF(i,a,b) for(RE int i=a;i>=b;--i)
 6 #define sc(n) scanf("%d",&n)
 7 
 8 using namespace std;
 9 
10 int m, n;
11 int a[305], b[5], e[6];
12 int tex[301][301];
13 long long ans;
14 
15 int main()
16 {
17     sc(n);
18     FOR(i, 1, n)
19     {
20         FOR(j, 1, n)tex[j][i] = tex[j][i - 1];
21         sc(a[i]); tex[a[i]][i] += 1;
22     }
23     FOR(i, 1, 4)
24     {
25         sc(b[i]);
26         FOR(j, 1, i - 1)
27             if (b[i] == b[j])
28                 if (j == 1)e[i - 2] = 1;
29                 else if (j == 2)e[i] = 1;
30                 else e[5] = 1;
31     }
32     FOR(i, 1, n - 3)
33         FOR(j, i + 1, n - 2)
34         {
35             if (e[0] && a[i] != a[j])continue;
36             if (!e[0] && a[i] == a[j])continue;
37             FOR(x, j + 1, n - 1)
38                 if ((e[1] && a[i] != a[x]) || (!e[1] && a[i] == a[x]))continue;
39                 else if ((e[3] && a[j] != a[x]) || (!e[3] && a[j] == a[x]))continue;
40                 else if (e[2])ans += tex[a[i]][n] - tex[a[i]][x];
41                 else if (e[4])ans += tex[a[j]][n] - tex[a[j]][x];
42                 else if (e[5]) ans += tex[a[x]][n] - tex[a[x]][x];
43                 else ans += n - x - tex[a[i]][n] + tex[a[i]][x] - (!e[0]) * (tex[a[j]][n] - tex[a[j]][x]) - (!e[1] && !e[3]) * (tex[a[x]][n] - tex[a[x]][x]);
44         }
45     printf("%lld", ans);
46     return 0;
47 }

猜你喜欢

转载自www.cnblogs.com/2aptx4869/p/12203522.html