日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2020hdu多校6

發布時間:2024/5/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020hdu多校6 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

hdu6828
題目
簡單模擬

#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
題目

就是一個求規律類似于

#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
題目
就是一個回溯更新維護題

#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
題目
求所有生成樹的期望 權 每一個生成樹的期望權是 權的&
拆分 二進制 直接對每一個來一遍求(無向圖)最小生成樹的個數 矩陣樹定理 求行列式

#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;//cin>>_;while(_--){init();solve();}return 0; }

總結

以上是生活随笔為你收集整理的2020hdu多校6的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。