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


A:

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

割线乘积=切线的平方

 1 #include
 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
 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区间和,就可以了。

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

相关