easy题——difficult数学

Posted dzn2004

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了easy题——difficult数学相关的知识,希望对你有一定的参考价值。

题目连接:https://www.luogu.com.cn/problem/P2220

——————————————————————————————————————————————————

题解:

从简单到困难的一步一步去思考:

我们先假设k=0;

ai为a位的可能;bi为b位的可能;ci为c位的可能...

则: a1*b1*c1+a1*b1*c2+a1*b2*c1+a1*b2*c2+a2*b1*c1+a2*b1*c2+a2*b2*c1+a2*b2*c2;

整理:(a1+a2)*(b1+b2)*(c1+c2);

然后考虑k;

即(a1+a2-z1)*(b1+b2-z2)*(c1+c2-z3);

这样你就有个O(n)了

但还不够;

再考虑K的大小;

于是把被k影响的先算了,再快速幂

O(k)的算法;

代码:

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <map>
 5 #define ll long long
 6 using namespace std;
 7 const int maxn=100005;
 8 const long long mod=1e9+7;
 9 map<pair<ll,ll>,ll> pe1;
10 map<ll,ll> pe2;
11 ll e[maxn];
12 ll kuai(ll now,ll mi){
13     ll e=now%mod,ans=1;
14     while(mi){
15         if(mi&1) ans*=(e%mod),ans%=mod;
16         e*=(e%mod),e%=mod;
17         mi>>=1;
18     }
19     return ans;
20 }
21 int main(){
22     //freopen("a.in","r",stdin);
23     ll n,m,k,luo=0;
24     scanf("%lld%lld%lld",&n,&m,&k);
25     for(ll i=1;i<=k;i++){
26         ll x,y;
27         scanf("%lld%lld",&x,&y);
28         if(!pe2[x]) e[++luo]=x;
29         if(pe1[make_pair(x,y)]) continue;
30         pe1[make_pair(x,y)]=1;
31         pe2[x]+=y;
32     }
33     ll ans=1,cluo=(n+1)*n/2;
34     for(ll i=1;i<=luo;i++){
35         ans*=(cluo-pe2[e[i]])%mod;
36         ans%=mod;
37     }
38     printf("%lld
",ans%mod*kuai(cluo,m-luo)%mod%mod);
39     return 0;
40 }

 

以上是关于easy题——difficult数学的主要内容,如果未能解决你的问题,请参考以下文章

初二英语

bzoj 2751 [HAOI2012]容易题(easy)(数学)

SSL.1213多边形面积(difficult)(计算几何)

SSL.1213多边形面积(difficult)(计算几何)

SSL.1213多边形面积(difficult)(计算几何)

《考研机试》机试题精讲