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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

10.7考试总结

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

10.7考試總結


二分答案專題OwO


T1

【問題描述】
一場地震毀了 Farmer John 的整個農場。他是個有恒心的人,決定
重建農場。在重建了所有 n( 1<=n<=400)塊田野后,他意識到還得
修路將它們連起來。完工后,任兩個田野間必須有路。
研究了地形后, FJ 認為 m(1<=m<=10000)條雙向的道路可能建造。
由于資金短缺,他希望已盡可能省錢的方式完成整個工程。
幸運的是,奶牛們已經成立了針對地震后修建農場道路的工程顧
問公司。奶牛們也很有經濟頭腦,對沒有漂亮利潤的工作從不感興趣。
奶牛們關心可能的利益。他們已經說定了為修路所獲的酬金
f(1<=f<=2,000,000,000),并得到一張關于可能的道路、修建每條路的
時 間 ( 以 小 時 計 ) ( 1 <=t<=2,000,000,000 ) 以 及 花 費
(1<=c<=2000,000,000)的列表。在兩塊田野間可能有多于一條的道路
被列出,所給數據總有可以連通所有田野的修路方案,雖然可能無利
可圖。
確定奶牛修路最高的盈利率。
輸入文件
第一行三個整數 N, M, F。
2...M+1 行: 每行四個空格隔開的整數: i, j, c,t 描述兩塊田夜間的一
條道路。
3
輸出文件
只包含一個數,保留四位小數,奶牛每個小時可以得到的最大利潤,
如果利潤非正,輸出 0.0000 。
樣例輸入 ( quake.in):
5 5 100
1 2 20 5
1 3 20 5
1 4 20 5
1 5 20 5
2 3 23 1
樣例輸出( quake.out):
1.0625
[奶牛選擇建最后四條路,總花費 83 時間 16,他們的籌勞是 100,所
以他們在 16 各單位時間內得到利潤 100-83: 17/16 = 1.0625。

網上有 并不知道在哪里評測= =
題目要求\(\frac{F-\sum c_i}{\sum t_i}\)的最大值
\(x=\frac{F-\sum c_i}{\sum t_i}\),然后亂搞得\(\sum t_i \times x=F-\sum c_i\)
再亂搞得\(F-\sum c_i-\sum t_i\times x=0\)
\(f(x)=F-\sum c_i-\sum t_i\times x\)
顯然這東西是個遞減函數= =
二分\(x\),然后把邊權設成\(c_i+t_i\times x\),跑一遍最小生成樹,把總和與F比一比完事

// It is made by XZZ #include<cstdio> #include<algorithm> #define Fname "quake" using namespace std; #define rep(a,b,c) for(rg int a=b;a<=c;a++) #define drep(a,b,c) for(rg int a=b;a>=c;a--) #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a]) #define il inline #define rg register #define vd void #define db long double typedef long long ll; il int gi(){rg int x=0;bool flg=0;rg char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')flg=1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();return flg?-x:x; } const int maxn=401,maxm=10001; int n,m,f; struct edge{int a,b,w,t;db v;}e[maxm]; bool operator < (edge a,edge b){return a.v<b.v;} int fa[maxn]; il int hd(int i){return fa[i]==i?i:hd(fa[i]);} il bool check(ll mid){rep(i,1,m)e[i].v=mid/3e6*e[i].t+e[i].w;int x=1;sort(e+1,e+m+1);rep(i,1,n)fa[i]=i;db k=f+1e-12;rep(i,2,n){while(x<=m&&hd(e[x].a)==hd(e[x].b))++x;fa[hd(e[x].a)]=hd(e[x].b),k-=e[x].v;if(k<0)return 0;}return 1; } int main(){freopen(Fname".in","r",stdin);freopen(Fname".out","w",stdout);n=gi(),m=gi(),f=gi();rep(i,1,m)e[i].a=gi(),e[i].b=gi(),e[i].w=gi(),e[i].t=gi();if(!check(0ll)){puts("0.0000");return 0;}ll mid,l=0,r=2e15;while(l<r){mid=(l+r)>>1;if(check(mid+1))l=mid+1;else r=mid;}printf("%.4Lf\n",l/(db)3e6);return 0; }

Ps.mdzz卡精度大狗題。。。


T2

http://www.lydsy.com/JudgeOnline/problem.php?id=1816

二分+1
二分一下幾副牌,然后要加的joker數量為\(\sum max(mid-c[i],0)\)
加的joker最多\(min(m,mid)\)個。判斷一下下

// It is made by XZZ #include<cstdio> #include<algorithm> #define Fname "cards" using namespace std; #define rep(a,b,c) for(rg int a=b;a<=c;a++) #define drep(a,b,c) for(rg int a=b;a>=c;a--) #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a]) #define il inline #define rg register #define vd void typedef long long ll; il ll gi(){rg ll x=0;bool flg=0;rg char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')flg=1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();return flg?-x:x; } ll c[52],n,m; il bool check(const ll&mid){ll tot=0;rep(i,1,n)tot+=max(0ll,mid-c[i]);return tot<=min(m,mid); } int main(){freopen(Fname".in","r",stdin);freopen(Fname".out","w",stdout);n=gi(),m=gi();ll mid,l=0,r=2e9;rep(i,1,n)c[i]=gi();while(l<r){mid=(l+r)>>1;if(check(mid+1))l=mid+1;else r=mid;}printf("%lld\n",l);return 0; }

T3

https://www.luogu.org/problem/show?pid=3199#sub
有向圖最小圈。
要求的是\(\frac{\sum C_i}{k}\)最小值
依然令\(x=\frac{\sum C_i}{k}\)
\(k\times x=\sum C_i\)
\(\sum_{i=1}^{k} C_i-k\times x=0\)
\(\sum C_i - x=0\)
如果\(\sum C_i -x <0\)的話,圖就有負環了= =二分\(x\),用神搜四把法搞搞。

// It is made by XZZ #include<cstdio> #include<algorithm> #include<cstring> #define Fname "cycle" using namespace std; #define rep(a,b,c) for(rg int a=b;a<=c;a++) #define drep(a,b,c) for(rg int a=b;a>=c;a--) #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a]) #define il inline #define rg register #define vd void typedef long long ll; il int gi(){rg int x=0;bool flg=0;rg char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')flg=1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();return flg?-x:x; } #define db long double il db gf(){static db a;scanf("%Lf",&a);return a;} const int maxn=3010,maxm=10010; int n,m,s,fir[maxn],dis[maxm],nxt[maxm],id;db w[maxm]; il vd add(int a,int b,db c){nxt[++id]=fir[a],dis[id]=b,fir[a]=id,w[id]=c;} db dist[maxn];bool flg=0; bool vis[maxn]; il vd spfa(const int &x){vis[x]=1;erep(i,x)if(dist[dis[i]]>dist[x]+w[i]){dist[dis[i]]=dist[x]+w[i];if(flg||vis[dis[i]]){flg=1;break;}spfa(dis[i]);}vis[x]=0; } il bool check(ll a){rep(i,1,id)w[i]-=a/1e9-(1e-16);rep(i,1,n)dist[i]=0,vis[i]=0;flg=0;rep(i,1,n){spfa(i);if(flg)break;}rep(i,1,id)w[i]+=a/1e9-(1e-16);return !flg; } int __sum; il vd dfs(const int&x){vis[x]=1,++__sum;erep(i,x)if(!vis[dis[i]])dfs(dis[i]);} int main(){freopen(Fname".in","r",stdin);freopen(Fname".out","w",stdout);n=gi(),m=gi();int a,b;db c;while(m--)a=gi(),b=gi(),c=gf(),add(a,b,c);ll l=-1e16,r=1e16,mid;rep(i,1,n){memset(vis,0,sizeof vis);__sum=0;dfs(i);if(__sum==n){s=i;break;}}while(l<r){mid=((l+r)>>1)+1;if(check(mid))l=mid;else r=mid-1;}printf("%.8lf\n",l/1e9);return 0; }

STO dsl AK OTZ

轉載于:https://www.cnblogs.com/xzz_233/p/7635727.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

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

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