17西安网络赛
这场比赛我就套模板给队友就打了个表=_=
我们最后一共就过了三道题...
dalao们都好强~
C. Sum
一开始以为是数论(最近碰到过相似的),看大家都那么快过有点懵逼...然后队友搞过了~
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=1010; 4 int a[maxn]; 5 6 int main(){ 7 int t; 8 scanf("%d",&t); 9 while(t--){ 10 int x; 11 scanf("%d",&x); 12 int pos=0; 13 while(x){ 14 a[pos++]=x%10; 15 x/=10; 16 } 17 for(int i = 1; i < 233; i++){ 18 printf("1"); 19 for(int j = 1; j < pos; j++){ 20 printf("0"); 21 } 22 } 23 puts("1"); 24 } 25 return 0; 26 }
B. Coin
概率dp,简单递推,场上愣是不会做=_=
一直在想着推公式直接求和,最后队友过了我才发现一开始的式子就列错了=_=
dp[n][0]表示前n次是偶数次正面朝上的概率,dp[n][1]表示前n次是奇数次正面朝上的概率
dp[n][0]=dp[n-1][0]*b+dp[n-1][1]*a;
dp[n][1]=dp[n-1][0]*a+dp[n-1][1]*b;
其中a=q,b=p-q;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /************************************************************************* 2 > File Name: a.cpp 3 > Author: yijiull 4 > Mail: 1147161372@qq.com 5 > Created Time: 2017年09月16日 星期六 19时13分06秒 6 ************************************************************************/ 7 8 #include <bits/stdc++.h> 9 using namespace std; 10 #define ll long long 11 const int maxn=8; 12 const int mod=1e9+7; 13 14 struct Matrix{ 15 ll n; 16 ll m[maxn][maxn]; 17 void init(ll sz){ 18 n=sz; 19 memset(m,0,sizeof(m)); 20 } 21 Matrix(ll sz){init(sz);} 22 void set_I(){ 23 for(int i = 0; i < n; i++) m[i][i]=1; 24 } 25 Matrix operator * (const Matrix& a){ 26 Matrix ans(n); 27 for(int i = 0; i < n; i++){ 28 for(int j = 0; j < n; j++){ 29 for(int k = 0; k < n; k++){ 30 ans.m[i][j]=(ans.m[i][j]+m[i][k]*a.m[k][j])%mod; 31 } 32 } 33 } 34 return ans; 35 } 36 }; 37 ll quickpow(ll a,ll b,ll m){ 38 ll ans=1,temp=a%m; 39 while(b){ 40 if(b&1) ans=ans*temp%m; 41 b>>=1; 42 temp=temp*temp%m; 43 } 44 return ans; 45 } 46 47 int main(){ 48 int t; 49 scanf("%d",&t); 50 while(t--){ 51 ll p,q,k; 52 scanf("%lld%lld%lld",&p,&q,&k); 53 ll a=q,b=p-q; 54 Matrix base(2),ans(2); 55 ans.set_I(); 56 base.m[0][0]=base.m[1][1]=b; 57 base.m[0][1]=base.m[1][0]=a; 58 ll n=k-1; 59 while(n){ 60 if(n&1) ans=ans*base; 61 n>>=1; 62 base=base*base; 63 } 64 ll res=(ans.m[0][0]*b%mod+ans.m[1][0]*a%mod)%mod; 65 res=(res*quickpow(quickpow(p,k,mod),mod-2,mod))%mod; 66 printf("%lld\n",res); 67 } 68 }
E. Maximum Flow
打表找规律+数位dp过了......
有空接着补~