生活随笔
收集整理的這篇文章主要介紹了
2020hdu多校6
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
hdu6828
題目
簡(jiǎn)單模擬
#include <iostream>using namespace std
;
typedef long long ll
;
string s
;
ll x
,y
,z
;
char c
;
int flag
=-1;
int vv
;
int main()
{while(cin
>>s
){vv
=0;flag
=-1;for(int b
=2;b
<=16;b
++){x
=0;int i
=0;for(;i
<s
.size();i
++){if(s
[i
]=='+'){y
=x
;x
=0;c
=s
[i
];}else if(s
[i
]=='-'){y
=x
;x
=0;c
=s
[i
];}else if(s
[i
]=='*'){y
=x
;x
=0;c
=s
[i
];}else if(s
[i
]=='/'){y
=x
;x
=0;c
=s
[i
];}else if(s
[i
]=='='){z
=x
;x
=0;}else{if(s
[i
]>='A'&&s
[i
]<='Z'){if(s
[i
]-'A'+10>=b
){vv
=0;break;}elsex
=x
*b
+s
[i
]-'A'+10;}else{if(s
[i
]-'0'>=b
){vv
=0;break;}elsex
=x
*b
+s
[i
]-'0';}}}if(i
==s
.size())vv
=1;if(!vv
)continue;if(c
=='+'){if(y
+z
==x
){flag
=b
;break;}}else if(c
=='-'){if(y
-z
==x
){flag
=b
;break;}}else if(c
=='*'){if(y
*z
==x
){flag
=b
;break;}}else{if(y
%z
==0&&y
/z
==x
){flag
=b
;break;}}}cout
<<flag
<<endl
;}return 0;
}
hdu6827
題目
就是一個(gè)求規(guī)律類似于
#include <iostream>using namespace std
;
typedef long long ll
;
int const mod
=1e9+7;
int a
[200005];
const int kk
=2e5+5;
ll inv
[kk
];
void getInv(ll mod
)
{inv
[1]=1;for(int i
=2;i
<kk
;i
++)inv
[i
]=(mod
-mod
/i
)*inv
[mod
%i
]%mod
;
}
int fast_pow(int a
,int n
)
{int res
=1;int temp
=a
;while(n
){if(n
&1){res
=(1ll*res
*temp
)%mod
;}temp
=1ll*temp
*temp
%mod
;n
>>=1;}return res
%mod
;
}
int main()
{ios
::sync_with_stdio(0);cin
.tie(0),cout
.tie(0);int T
;getInv(mod
);int res
;int ans
;int bns
;cin
>>T
;while(T
--){res
=0;ans
=0;bns
=0;int n
;cin
>>n
;ll di
=(1ll*n
*(n
+1)/2)%mod
;di
=fast_pow(di
,mod
-2);for(int i
=1;i
<=n
;i
++){res
=(1ll*res
+inv
[i
])%mod
;cin
>>a
[i
];}for(int i
=1;i
<=n
/2;i
++){ans
=(1ll*ans
+res
)%mod
;bns
=(1ll*bns
+(1ll*ans
*a
[i
])%mod
)%mod
;bns
=(1ll*bns
+(1ll*ans
*a
[n
+1-i
])%mod
)%mod
;res
=(1ll*res
+mod
-inv
[i
]+mod
-inv
[n
+1-i
])%mod
;}if(n
%2!=0){ans
=(1ll*ans
+res
)%mod
;bns
=(1ll*bns
+(1ll*ans
*a
[n
/2+1])%mod
)%mod
;}bns
=(1ll*bns
*di
)%mod
;cout
<<bns
<<"\n";}return 0;
}
hdu6832
題目
就是一個(gè)回溯更新維護(hù)題
#include <bits/stdc++.h>
using namespace std
;
typedef long long ll
;
const int INF
=1e9+5;
const int mod
=1e9+7;
const int maxn
=1e5+5;
const int maxm
=2e5+5;
struct node
{int a
,b
;
};
node po
[maxn
];
struct edge
{int v
,next
;ll w
;
};
int fa
[maxn
];
edge no
[maxm
*2];
int head
[maxn
];
int cnt
;
ll ans
;
int n
,m
;
ll zero
,one
;
int find_(int x
)
{return x
==fa
[x
]?x
:fa
[x
]=find_(fa
[x
]);
}
void add(int x
,int y
,ll w
)
{no
[cnt
].v
=y
;no
[cnt
].w
=w
;no
[cnt
].next
=head
[x
];head
[x
]=cnt
;cnt
++;
}
void init()
{ans
=zero
=one
=0;cnt
=1;for(int i
=1;i
<=n
;i
++){fa
[i
]=i
;head
[i
]=0;po
[i
].a
=po
[i
].b
=0;}
}
void dfs(int u
,int fa
)
{for(int i
=head
[u
];i
;i
=no
[i
].next
){int v
=no
[i
].v
;if(v
==fa
)continue;dfs(v
,u
);po
[u
].a
+=po
[v
].a
;po
[u
].b
+=po
[v
].b
;}for(int i
=head
[u
];i
;i
=no
[i
].next
){int v
=no
[i
].v
;ll w
=no
[i
].w
;if(v
==fa
)continue;ans
=(ans
+((zero
-po
[v
].a
)*po
[v
].b
%mod
*w
%mod
))%mod
;ans
=(ans
+((one
-po
[v
].b
)*po
[v
].a
%mod
*w
%mod
))%mod
;}
}
void solve()
{for(int i
=1;i
<=n
;i
++){int x
;cin
>>x
;if(x
==0)po
[i
].a
=1,zero
++;elsepo
[i
].b
=1,one
++;}ll res
=1;for(int i
=1;i
<=m
;i
++){res
=(res
*2)%mod
;int x
,y
;cin
>>x
>>y
;int fax
=find_(x
);int fay
=find_(y
);if(fax
!=fay
){fa
[fax
]=fay
;add(x
,y
,res
);add(y
,x
,res
);}}dfs(1,-1);cout
<<ans
<<endl
;
}
int main() {ios
::sync_with_stdio(0);cin
.tie(0),cout
.tie(0);int _
=1;cin
>>_
;while(_
--){cin
>>n
>>m
;init();solve();}return 0;
}
hdu6836
題目
求所有生成樹(shù)的期望 權(quán) 每一個(gè)生成樹(shù)的期望權(quán)是 權(quán)的&
拆分 二進(jìn)制 直接對(duì)每一個(gè)來(lái)一遍求(無(wú)向圖)最小生成樹(shù)的個(gè)數(shù) 矩陣樹(shù)定理 求行列式
#include <bits/stdc++.h>
using namespace std
;
typedef long long ll
;
const int INF
=1e9+5;
const int mod
=998244353;
const int maxn
=105;
const int maxm
=1e4+5;
int n
,m
;
vector
<vector
<int> >vv
;
ll result
;
struct edge
{int x
,y
;ll w
;
};
edge no
[maxm
];
int map_
[maxn
][maxn
];
ll
quickpow(ll a
,int n
,int mod
)
{ll res
=1;ll temp
=a
;while(n
){if(n
&1){res
=res
*temp
%mod
;}temp
=temp
*temp
%mod
;n
>>=1;}return res
%mod
;
}
void init()
{vv
.clear();for(int i
=1;i
<=n
;i
++){for(int j
=1;j
<=n
;j
++){map_
[i
][j
]=0;}}
}
ll
Determinant(const vector
<vector
<int> >& A
) {ll res
= 1;int n
= A
.size(), cnt
= 0;vector
<vector
<int> > B(n
, vector
<int>(n
));for (int i
= 0; i
< n
; ++i
)for (int j
= 0; j
< n
; ++j
)B
[i
][j
] = A
[i
][j
];for (int i
= 0; i
< n
; ++i
) {int pivot
= i
;for (int j
= i
; j
< n
; ++j
)if (abs(B
[j
][i
]) > abs(B
[pivot
][i
]))pivot
= j
;if (i
!= pivot
) {swap(B
[i
], B
[pivot
]);cnt
^= 1;}if (B
[i
][i
] == 0)return -1;ll val
= quickpow(B
[i
][i
], mod
- 2, mod
);for (int j
= i
+ 1; j
< n
; ++j
) {ll coe
= B
[j
][i
] * val
% mod
;for (int k
= i
; k
< n
; ++k
)B
[j
][k
] = (B
[j
][k
] - 1ll * coe
* B
[i
][k
] % mod
) % mod
;}}for (int i
= 0; i
< n
; ++i
)res
= res
* B
[i
][i
] % mod
;if (cnt
)res
= -res
;if (res
< 0)res
+= mod
;return res
;
}
void solve()
{result
=0;cin
>>n
>>m
;init();for(int i
=1;i
<=m
;i
++){cin
>>no
[i
].x
>>no
[i
].y
>>no
[i
].w
;}for(int i
=1;i
<=m
;i
++){int u
=no
[i
].x
;int v
=no
[i
].y
;map_
[u
][u
]++;map_
[v
][v
]++;map_
[u
][v
]--;map_
[v
][u
]--;}for(int i
=1;i
<n
;i
++){vv
.push_back({});for(int j
=1;j
<n
;j
++){vv
[i
-1].push_back(map_
[i
][j
]);}}ll sum
=Determinant(vv
);sum
=quickpow(sum
,mod
-2,mod
);for(int i
=0;i
<30;i
++){init();for(int j
=1;j
<=m
;j
++){int u
=no
[j
].x
;int v
=no
[j
].y
;ll w
=no
[j
].w
;if(w
&(1ll<<i
)){map_
[u
][u
]++;map_
[v
][v
]++;map_
[u
][v
]--;map_
[v
][u
]--;}}for (int i
= 1; i
< n
; ++i
) {vv
.push_back({});for (int j
= 1; j
< n
; ++j
)vv
[i
- 1].push_back(map_
[i
][j
]);}ll ans
=Determinant(vv
);if(ans
==-1)continue;ans
=ans
*(1ll<<i
)%mod
;result
=(result
+ans
)%mod
;}cout
<<result
*sum
%mod
<<endl
;
}
int main() {ios
::sync_with_stdio(0);cin
.tie(0),cout
.tie(0);int _
=1;cin
>>_
;while(_
--){solve();}return 0;
}
hdu6831
題目
打表
#include <bits/stdc++.h>
using namespace std
;
typedef long long ll
;
const int INF
=1e9+5;
string s
="01145141919114";
vector
<int>vv
[14][14];
map
<int,int>mm
[14][14];
int flag
[5000]={0};
void init()
{for(int i
=1;i
<=13;i
++){for(int j
=i
;j
<=min(13,i
+3);j
++){int res
=0;for(int k
=i
;k
<=j
;k
++){res
=res
*10+s
[k
]-'0';if(res
>5000)break;}if(res
<=5000&&mm
[i
][j
][res
]==0){vv
[i
][j
].push_back(res
);mm
[i
][j
][res
]=1;}}}
}
void solve()
{for(int len
=2;len
<=13;len
++){for(int i
=1;i
<=13-len
+1;i
++){for(int t
=1;t
<len
;t
++){int l
=i
;int r
=i
+len
-1;int mid
=i
+t
-1;for(int j
=0;j
<vv
[l
][mid
].size();j
++){for(int k
=0;k
<vv
[mid
+1][r
].size();k
++){int res
=vv
[l
][mid
][j
]+vv
[mid
+1][r
][k
];if(res
<=5000&&mm
[l
][r
][res
]==0){mm
[l
][r
][res
]=1;vv
[l
][r
].push_back(res
);}res
=vv
[l
][mid
][j
]*vv
[mid
+1][r
][k
];if(res
<=5000&&mm
[l
][r
][res
]==0){mm
[l
][r
][res
]=1;vv
[l
][r
].push_back(res
);}}}}}}for(int i
=1;i
<=13;i
++){for(int j
=0;j
<vv
[1][i
].size();j
++){if(flag
[vv
[1][i
][j
]]==0){flag
[vv
[1][i
][j
]]=i
;}}}cout
<<"int a[5005]={0,";for(int i
=1;i
<=5000;i
++){if(!flag
[i
]){cout
<<"-1";if(i
!=5000)cout
<<",";}else{cout
<<flag
[i
];if(i
!=5000)cout
<<",";}}cout
<<"};";
}
int main() {ios
::sync_with_stdio(0);cin
.tie(0),cout
.tie(0);int _
=1;while(_
--){init();solve();}return 0;
}
總結(jié)
以上是生活随笔為你收集整理的2020hdu多校6的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。