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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Full_of_Boys训练6总结

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Full_of_Boys训练6总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目來源:2014-2015 ACM-ICPC, Asia Xian Regional Contest

F.?Color

第一道二項式反演。。膜題解:?https://www.cnblogs.com/wmrv587/p/6681953.html

#include<bits/stdc++.h> typedef long long ll; const ll mod = 1e9 + 7; using namespace std; ll q_pow(ll a,ll b){ll ans=1;while(b){if(b&1)ans=(ans*a)%mod;a=(a*a)%mod;b>>=1;}return ans; } ll n,m,k,inv[1000007]; ll C(ll n,ll m){ll t=1;for(ll i=n-m+1;i<=n;++i)t=(t*i)%mod;for(ll i=1;i<=m;++i)t=(t*inv[i])%mod;return t; } ll a(ll x){return ((x%mod)*q_pow(x-1,n-1)%mod)%mod;} int T,K; int main() {scanf("%d",&T);for(int i=1;i<=1e6;++i)inv[i]=q_pow(i,mod-2);while(T--){scanf("%lld%lld%lld",&n,&m,&k);ll ans=0,w=1,Cki=1;if(k%2)w=-1;for(int i=0;i<=k;++i,w=-w){ans = (ans%mod + (w*(Cki%mod*a(i)%mod)%mod+mod)%mod)%mod;Cki=(((Cki%mod)*(k-i)%mod)*inv[i+1]%mod)%mod;}ans = (ans*C(m,k))%mod;printf("Case #%d: %lld\n",++K,ans);} }

C. The Problem Needs 3D Arrays

將有逆序關系的點相連,題目轉化為,求最大密度子圖。回去復習論文。。

update:今天看了一下,馬上就想起來了。。。于是寫了一下。。。有點傷感。。。按論文第一種方式建二分圖。。。T了?,,于是學了第二種建圖。。。精度炸了?倒查了3個小時。。。inf開大了,導致大數,吞小數。。。計方老師。。。終于過了第一個樣例。。。T在第二個?查了半小時。。。數組開太大了,還用的memset。。。,改掉成WA了?于是把eps調小了點。。。當我準備改long double時。過了。。。真的是好感傷。。。就讀過幾篇論文。。。被考到了。。。還不會。。。知道了還寫炸。。。沒救了。沒救了。

#include <bits/stdc++.h> #define pb(x) push_back(x) #define LD long double typedef long long ll; const int maxn = 510000; const int maxm = 2100000; const double eps = 1e-7; using namespace std; double inf; int T,n,a[111]; struct node{int x,y;node(){}node(int a,int b){x=a;y=b;} }; vector<node> ee; struct edge{int e,nxt;LD w;}E[maxm]; int h[maxn],cc; void add(int u,int v,LD w){E[cc].e=v;E[cc].w=w;E[cc].nxt=h[u];h[u]=cc;++cc;E[cc].e=u;E[cc].w=0;E[cc].nxt=h[v];h[v]=cc;++cc; } int dd[maxn],q[maxn],st,ed; int bfs(){int l=0,r=0;for(int i=0;i<=n+1;++i)dd[i]=0;q[r]=st;++r;dd[st]=1;while(l<r){int u=q[l];++l;for(int i=h[u];~i;i=E[i].nxt){int v=E[i].e;if(!dd[v]&&E[i].w>=eps){dd[v]=dd[u]+1;q[r]=v;++r;if(v==ed)return 1;}}}return 0; } LD dfs(int u,LD fl) {if(u==ed)return fl;LD s=fl,t;for(int i=h[u];~i;i=E[i].nxt){int v=E[i].e;if(dd[v]==dd[u]+1&&E[i].w>=eps&&s>=eps){t=dfs(v,min(E[i].w,s));s-=t;E[i].w-=t;E[i^1].w+=t;if(s<eps)return fl;}}if(abs(s-fl)<eps) dd[u]=0;return fl-s; } LD dinic(){LD ans=0;while(bfs())ans+=dfs(st,inf);return ans; } int m,d[111]; void build(LD g){for(int i=0;i<=n+1;++i)h[i]=-1;cc=0;st=0;ed=n+1;inf=m*3+m*n+m+2*g+10000.0;for(int i=0;i<m;++i){add(ee[i].x,ee[i].y,1.0);add(ee[i].y,ee[i].x,1.0);}for(int i=1;i<=n;++i){add(st,i,m*1.0);add(i,ed,m*1.0+2.0*g-d[i]);} } LD solve(LD g) {build(g);return (n*m*1.0-dinic()); } int K=0; int main() {scanf("%d",&T);while(T--) {ee.clear();scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d",&a[i]),d[i]=0;for(int i=2;i<=n;++i)for(int j=1;j<i;++j)if(a[j]>a[i]){ee.pb(node(i,j));++d[i];++d[j];}m=ee.size();LD l=0, r = m, mid;int tt=0;while(r-l>=eps){mid = (l+r)/2.0; LD t = solve(mid);//printf("%f %f\n",(double)mid,(double)t);if(t>eps)l=mid;else r=mid;}printf("Case #%d: %f\n",++K,(double)l);}return 0; } //5 //5 //3 4 2 5 1

  

轉載于:https://www.cnblogs.com/RRRR-wys/p/9048819.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Full_of_Boys训练6总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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