平面分割
题目描述
20 个圆和 20 条直线最多能把平面分成多少个部分?
#include <iostream>
using namespace std;
int main()
{int ans=2;//第一个圆分成两个区域for(int i=2;i<=20;i++)ans+=2*(i-1);//第i个圆最多和前i-1个圆每个产生2个int n=20;ans+=40;//第一条直线和20个圆最多交于20个点,区域增加一倍for(int i=2;i<=20;i++)ans=ans+40+i;//第i条直线和圆最多交于40个点,与前i-1个直线最多 交于i-1个点,分成i段,所以最多增加40+i个区域cout<<ans<<endl;return 0;
}
最大降雨量
题目描述
由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。
这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 个数字。法术一共持续 7 周,每天小明都要使用一张法术符,法术符不能重复使用。
每周,小明施展法术产生的能量为这周 7 张法术符上数字的中位数。法术 施展完 7 周后,求雨将获得成功,降雨量为 7 周能量的中位数。
由于干旱太久,小明希望这次求雨的降雨量尽可能大,请大最大值是多少?
必须让第四周第4天降雨量最大,又因为中位数要求:第四周后3天和第五六七周后4天都要比其大
所以:max=49-3-3*4=34;
递增三元组
题目描述
给定三个整数数组
A=[A1?,A2?,?AN?],
B=[B1?,B2?,?BN?],
C=[C1?,C2?,?CN?],
请你统计有多少个三元组 (i, j, k) 满足:
-
1≤i,j,k≤N;
-
$A_i < B_j < C_k&。
输入描述
第一行包含一个整数 N。
第二行包含 N 个整数 A1?,A2?,?AN?。
第三行包含 N 个整数 B1?,B2?,?BN?。
第四行包含 N 个整数 C1?,C2?,?CN?。
其中,1≤N≤10^5,0≤Ai,Bi,Ci≤10^5。
输出描述
输出一个整数表示答案。
示例:
3
1 1 1
2 2 2
3 3 3
```txt
>输出
```txt
27
#include <iostream>
using namespace std;//递增三元组
#include<algorithm>
int main()
{int N;cin>>N;int a[N],b[N],c[N];for(int i=0;i<N;i++)cin>>a[i];for(int i=0;i<N;i++)cin>>b[i];for(int i=0;i<N;i++)cin>>c[i];sort(a,a+N);sort(b,b+N);sort(c,c+N);long long ans=0,p=0,q=0;//组合可能会很多for(int i=0;i<N;i++){while(p<N&&a[p]<b[i])p++;while(q<N&&c[q]<=b[i])//由于数组按升序排列,因此如果c[q]>b[i]==>可能直接跳出循环q++;ans+=p*(N-q);}cout<<ans<<endl;return 0;
}