2019牛客暑期多校训练营(第一场) B Integration(裂项解方程+找规律)

链接:https://ac.nowcoder.com/acm/contest/881/B
来源:牛客网

题目大意:有$\frac{1}{\pi }\int_{0}^{\infty }\frac{1}{1^{2}+x^{2}}dx=\frac{\pi }{2}$,给一个序列$a_{1},a_{2},...,a_{n}$,让你求$\frac{1}{\pi }\int_{0}^{\infty }\frac{1}{\prod_{i=1}^{n}{a_{i}}^{2}+x^{2}}dx$的解mod($10^{9}+7$)。

解法:

  1. 当n=1时,该方程为$\frac{1}{\pi }\int_{0}^{\infty }\frac{1}{a^{2}+x^{2}}dx$

    有不定积分$\frac{1}{a^{2}+x^{2}}$=$\frac{1}{a}arctan\frac{x}{a}+C$

    当$x\rightarrow \infty $时,$\frac{1}{a}arctan\frac{x}{a}=\frac{\pi }{2a}$

    所以n=1时,答案为$\frac{1}{2a}$

 

  2. 当n=2时,设$a_{1}$为a,$a_{2}$为b。

    该方程为$\frac{1}{\pi }\int_{0}^{\infty }\frac{1}{(a^{2}+x^{2})(b^{2}+x^{2})}dx$

    由于不定积分里面的分式乘积的形式,那么可以采用拆项积分法,可将方程表示成$\frac{1}{\pi }\int_{0}^{\infty }(\frac{\alpha }{a^{2}+x^{2}}+\frac{\beta }{b^{2}+x^{2}})dx$

    通分,方程为$\frac{1}{\pi }\int_{0}^{\infty }\frac{(\alpha b^{2}+\beta a^{2})+(\alpha+\beta)x^{2}}{(a^{2}+x^{2})(b^{2}+x^{2})}dx$

    得到两个方程两个未知数$\left\{\begin{matrix}
\alpha b^{2}+\beta a^{2}=1\\
\alpha+\beta=0
\end{matrix}\right.$

    解得$\left\{\begin{matrix}
\alpha =\frac{1}{b^{2}-a^{2}}\\
\beta=\frac{1}{a^{2}-b^{2}}
\end{matrix}\right.$

    原方程可化为$\frac{1}{\pi }[\frac{1}{b^{2}-a^{2}}\int_{0}^{\infty }\frac{1}{(a^{2}+x^{2})}dx+\frac{1}{a^{2}-b^{2}}\int_{0}^{\infty }\frac{1}{(b^{2}+x^{2})}dx]$

    所以n=2时,答案为$\frac{1}{(b^{2}-a^{2})}\frac{1}{2a}+\frac{1}{(a^{2}-b^{2})}\frac{1}{2b}$

 

  3. 当n=3时,设$a_{1}$为a,$a_{2}$为b,$a_{3}$为c。

      同样使用拆项积分法,可将该方程表示成$\frac{1}{\pi }\int_{0}^{\infty }(\frac{\alpha }{a^{2}+x^{2}}+\frac{\beta }{b^{2}+x^{2}}+\frac{\gamma }{c^{2}+x^{2}})dx$

   通分后,$\frac{1}{\pi }\int_{0}^{\infty }\frac{(\alpha b^{2}c^{2}+\beta a^{2}c^{2}+\gamma
a^{2}b^{2})+(\alpha b^{2}+\alpha c^{2}+\beta a^{2}+\beta c^{2}+\gamma a^{2}+\gamma b^{2})x^{2}+(\alpha+\beta+\gamma)x^{4}}{(a^{2}+x^{2})(b^{2}+x^{2})(c^{2}+x^{2})}dx$

      可得三个方程,$\left\{\begin{matrix}
\alpha b^{2}c^{2}+\beta a^{2}c^{2}+\gamma
a^{2}b^{2}=1\\\alpha b^{2}+\alpha c^{2}+\beta a^{2}+\beta c^{2}+\gamma a^{2}+\gamma b^{2}=0
\\\alpha+\beta+\gamma=0
\end{matrix}\right.$

    解得$\left\{\begin{matrix}
\alpha=\frac{1}{(b^{2}-a^{2})(c^{2}-a^{2})}\\
\beta=\frac{1}{(a^{2}-b^{2})(c^{2}-b^{2})}\\
\gamma=\frac{1}{(a^{2}-c^{2})(b^{2}-c^{2})}
\end{matrix}\right.$

    所以n=3时,答案为$\frac{1}{(b^{2}-a^{2})(c^{2}-a^{2})}\frac{1}{2a}+\frac{1}{(a^{2}-b^{2})(c^{2}-b^{2})}\frac{1}{2b}+\frac{1}{(a^{2}-c^{2})(b^{2}-c^{2})}\frac{1}{2c}$

    对比n=1,n=2,n=3,可以发现该方程的解为$\sum_{i=1}^{n}\frac{1}{2a_{i}}\prod_{j!=i}\frac{1}{a_{j}^{2}-a_{i}^{2}}$

于是我们便可以在O($n^{2}$)的算出结果

AC代码:

 语言:C++ 代码长度:1316 运行时间: 338 ms 占用内存:1376K 

 1 #include<bits/stdc++.h>
 2 #define numm ch-48
 3 #define pd putchar(' ')
 4 #define pn putchar('\n')
 5 #define pb push_back
 6 #define fi first
 7 #define se second
 8 #define fre1 freopen("1.txt","r",stdin)
 9 #define fre2 freopen("2.txt","w",stdout)
10 using namespace std;
11 template <typename T>
12 void read(T &res) {
13     bool flag=false;char ch;
14     while(!isdigit(ch=getchar())) (ch=='-')&&(flag=true);
15     for(res=numm;isdigit(ch=getchar());res=(res<<1)+(res<<3)+numm);
16     flag&&(res=-res);
17 }
18 template <typename T>
19 void write(T x) {
20     if(x<0) putchar('-'),x=-x;
21     if(x>9) write(x/10);
22     putchar(x%10+'0');
23 }
24 typedef long long ll;
25 const int maxn=1e3+10;
26 const ll mod=1e9+7;
27 ll a[maxn];
28 ll quickpow(ll a,ll b,ll mod) {
29     ll ans=1;
30     while(b) {
31         if(b&1) ans=(ans*a)%mod;
32         a=(a*a)%mod;
33         b>>=1;
34     }
35     return ans;
36 }
37 int main()
38 {
39     int n,m,k;
40     while(scanf("%d",&n)!=EOF) {
41         for(int i=1;i<=n;i++)
42             read(a[i]);
43         ll sum=0;
44         for(int i=1;i<=n;i++) {
45             ll temp=1;
46             for(int j=1;j<=n;j++) {
47                 if(i==j) continue;
48                 temp=(temp*(a[j]*a[j]%mod-a[i]*a[i]%mod+mod)%mod)%mod;
49             }
50             temp=temp*2%mod*a[i]%mod;
51             sum=(sum+quickpow(temp,mod-2,mod)%mod)%mod;
52         }
53         write(sum);pn;
54     }
55     return 0;
56 }
代码在这里!

 

posted @ 2019-07-24 16:15  wuliking  阅读(239)  评论(0编辑  收藏  举报