J Fraction Comparision 签到题 __int128
A Equivalent Prefixes 单调栈
B Integration 数学题,微积分
C Euclidean Distance 前缀和
F Random Point in Triangle概率+几何
A Equivalent Prefixes
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int a[maxn],b[maxn];
int dp1[maxn],dp2[maxn];
int main()
{
int n;
while(scanf("%d",&n) != EOF) {
for(int i = 1; i <= n; ++i) scanf("%d",&a[i]);
for(int i = 1; i <= n; ++i) scanf("%d",&b[i]);
// for(int i = 1; i <= n; ++i) printf("%d ",a[i]);
// for(int i = 1; i <= n; ++i) printf("%d ",b[i]);
// cout << endl;
dp1[1] = a[1],dp2[1] = b[1];
int len1 = 1,len2 = 1;
for(int i=2;i<=n;i++){
if(a[i] >= dp1[len1]){
dp1[++len1]=a[i];
}
else{
int j=upper_bound(dp1+1,dp1+len1+1,a[i])-dp1;
// dp1[j]=a[i];
// if(a[i] < mmin1){
// mmin1 = a[i];
// len1 = 1;
// dp1[len1] = a[i];
// }
len1 = j;
dp1[len1] = a[i];
}
if(b[i] >= dp2[len2]){
dp2[++len2]=b[i];
}
else{
int j=upper_bound(dp2+1,dp2+len2+1,b[i])-dp2;
// dp2[j]=b[i];
// if(b[i] < mmin2){
// mmin2 = b[i];
// len2 = 1;
// dp2[len2] = b[i];
// }
len2 = j;
dp2[len2] = b[i];
}
// cout << len1 << "?" << len2 << " ";
if(len1 != len2){
printf("%d\n",i - 1);
break;
}
}
if(len1 == len2) printf("%d\n",n);
}
return 0;
}
B Integration
# include <bits/stdc++.h>
using namespace std;
//const double PI=atan(1)*4;
typedef long long LL;
const LL PI=3;
LL a[1100];
LL mod=1e9+7;
LL quick_pow(LL a,LL b)
{
LL ret=1;
while(b)
{
if(b&1) ret=ret*a%mod;
a=a*a%mod;
b=b/2;
}
return ret%mod;
}
int main()
{
int n;
while(~scanf("%d",&n)){
LL ans1=1;
LL sum=0;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
for(int i=1;i<=n;i++){
LL ans2=1;
for(int j=1;j<=n;j++){
LL aa;
if(j!=i){
aa=a[j]*a[j]-a[i]*a[i];
ans2=(ans2*(aa%mod+mod)%mod)%mod;
}
}
LL ans=1;
//cout<<"@@@"<<ans2<<endl;
ans1=((2*a[i])%mod*ans2)%mod;
ans=quick_pow(ans1,mod-2);
ans=(1*ans)%mod;
sum=(sum+ans)%mod;
//cout<<"@@@"<<ans1<<" "<<ans2<<endl;
}
printf("%lld\n",sum);
}
return 0;
}
C Euclidean Distance
尽可能一样的和是最小的我是看这位大大的,再怎么写也不可能比这位大大好,大家看这位大大的吧
# include <bits/stdc++.h>
using namespace std;
const int MAXN=1e4+100;
int a[MAXN];
typedef long long LL;
LL sum[MAXN];
int cmp(int a,int b)
{
return a>b;
}
LL gcd(LL a,LL b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m)){
int now=n;
LL ansa,ansb;
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+n+1,cmp);
sum[0]=-m;
for(int i=1;i<=n;i++){
sum[i]=sum[i-1]+a[i];
}
for(int i=1;i<n;i++){
if(sum[i]>a[i+1]*i){
now=i;
break;
}
}
ansa=sum[now]*sum[now]*now;
ansb=now*now;
for(int i=now+1;i<=n;i++){
ansa+=a[i]*a[i]*now*now;
}
ansb=ansb*m*m;
LL gd=gcd(ansa,ansb);
ansa=ansa/gd;
ansb=ansb/gd;
//cout<<"@@@";
if(ansb==1||ansa==0) printf("%lld\n",ansa);
else printf("%lld/%lld\n",ansa,ansb);
}
return 0;
}
F Random Point in Triangle
# include <bits/stdc++.h>
using namespace std;
typedef long long LL;
//给三角形的三个坐标点,求三角形的面积
LL area(LL x1,LL y1,LL x2,LL y2,LL x3,LL y3)
{
LL sum=11*abs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2);
return sum;
}
int main()
{
LL x1,y1,x2,y2,x3,y3;
while(cin>>x1>>y1>>x2>>y2>>x3>>y3){
cout<<area(x1,y1,x2,y2,x3,y3)<<endl;
}
return 0;
}
J Fraction Comparision
签到题,可以用__int128过,比较x * b和y * a即可
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(void){
LL a,x,b,y;
while(~scanf("%lld %lld %lld %lld",&x,&a,&y,&b)){
__int128 aa=x; aa=aa*b;
__int128 bb=y; bb=bb*a;
if(aa>bb){
printf(">\n");
}else if(aa==bb){
printf("=\n");
}else{
printf("<\n");
}
}
return 0;
}