2019西北工业大学程序设计创新实践基地春季选拔赛(重现赛)

本文深入探讨了数学算法竞赛中的两个经典问题:一是利用割线乘积等于切线平方的弦定理解决几何问题;二是通过隔板法解决不定方程的正整数解和非负整数解计数问题。文章提供了详细的算法实现代码,并强调了在计算过程中避免溢出、使用递归求解阶乘以及快速幂运算的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A:

我直接上模板了。。。然而可以切割弦定理轻易解决。

割线乘积=切线的平方

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main() {
 5     int x0,y0,r,x1,y1,y2;
 6     scanf("%d%d%d%d%d%d",&x0,&y0,&r,&x1,&y1,&y2);
 7     long long a=1ll*(x0-x1)*(x0-x1)+1ll*(y0-y1)*(y0-y1);
 8     long long ans=a-1ll*r*r;
 9     printf("%lld",ans);
10 }

 

B:水题

 

 

D:

Cocoa想知道这个不定方程的正整数解和非负整数解各有几个。

 

隔板问题:

正整数解:分成n个1,然后插板,共C(m-1,n-1)个,

非负整数解:每个数加1,然后插板,共C(n+m-1,m-1)个

注意溢出,还有就是递推求阶乘记得  f[0]=1。

还有就是逆元和取模了。

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=3000010;
 4 const int mod=1e9+7;
 5 typedef long long ll;
 6 
 7 ll f[maxn];
 8 ll my_pow(ll a,ll b,ll mod) {
 9     ll ans=1;
10     ll tmp=a%mod;
11     while(b) {
12         if(b&1) ans=(ans*tmp)%mod;
13         tmp=(tmp*tmp)%mod;
14         b>>=1;
15     }
16     return ans;
17 }
18 
19 int main() {
20     int m,n;
21     scanf("%d%d",&m,&n);
22     f[0]=1;
23     for(int i=1;i<=n*2;i++) f[i]=(f[i-1]*i)%mod;
24     printf("%d " ,(((f[n-1]*my_pow(f[m-1],mod-2,mod))%mod)*my_pow(f[n-m],mod-2,mod))%mod);
25     printf("%d",(((f[n+m-1]*my_pow(f[m-1],mod-2,mod))%mod)*my_pow(f[n],mod-2,mod))%mod);
26 }

 

F:

根据题意和期望定义。直接求lL-R区间和,就可以了。

可能是太依靠模板,直接上的线段树,没写前缀和。。。

转载于:https://www.cnblogs.com/ACMerszl/p/10685761.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值