每日刷题(四十九)
蓝桥杯第九届C语言B组省赛习题
习题F:递增三元组
这个题不应该用暴力破解法,应该以b数组的n个元素来循环,具体分析如图:
每次循环就在原来的p、q基础上修改增加,A中满足的会越来越多,C中满足的会越来越少,用ans记录所有的满足条件的三元组(i,j,k)
详细C代码如下:
#include<stdio.h>
int n;
void sort(int a[])
{
int i, j;
int t = 0;
for(i = 0; i < n - 1; i++)
{
for(j = i + 1; j < n; j++)
{
if(a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
}
int main()
{
scanf("%d", &n);
int a[n], b[n], c[n];
int i;
for(i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
for(i = 0; i < n; i++)
{
scanf("%d", &b[i]);
}
for(i = 0; i < n; i++)
{
scanf("%d", &c[i]);
}
sort(a);
sort(b);
sort(c);
int ans = 0;
int p = 0;
int q = 0;
for(i = 0; i < n; i++)
{
while(p < n && a[p] < b[i])
p++;
while(q < n && c[q] <= b[i])
q++;
ans += p * (n - q);
}
printf("%d\n", ans);
return 0;
}
样例运行结果如下: