[CodeM初赛A轮]C
来源:互联网 发布:知世故而不世故, 编辑:程序博客网 时间:2024/05/29 10:08
题解
T在max和min之间无解。
考虑二分答案,然后判定很简单。
要注意一些坑点,比如解出来的体积小于0,以及没有进行任何二分判定等。
我的方法没过样例,但是过了这题……
#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef double db;const db eps=1e-6;const int maxn=100000+10;int t[maxn],c[maxn];int i,j,k,n,m,T,C,mx,mi;db l,r,mid,ans;bool check(db ans){ if (fabs(T-ans)<=eps) return 0; int i; db x,l,y=0; fo(i,1,n){ l=-(t[i]-ans)*c[i]; x=l/(T-ans); if (x<0) return 0; y+=x; } if (y<=C) return 1;else return 0;}int main(){ scanf("%d",&n); scanf("%d%d",&T,&C); mi=1000000; fo(i,1,n) scanf("%d%d",&t[i],&c[i]),mx=max(mx,t[i]),mi=min(mi,t[i]); l=0;r=10000; if (T>mx) l=mx,r=T; else if (T<mi) l=T,r=mi; /*else{ printf("Impossible\n"); return 0; }*/ if (mx==mi&&T==mx){ printf("Possible\n%.4lf\n",db(T)); return 0; } ans=-1; while (r-l>=eps){ mid=(l+r)/2; if (check(mid)){ ans=mid; l=mid; } else r=mid; } if (ans==-1) printf("Impossible\n");else printf("Possible\n%.4lf\n",ans);}
阅读全文
0 0
- [CodeM初赛A轮]C
- [CodeM初赛A轮]A
- [CodeM初赛A轮]B
- [CodeM初赛A轮]D
- [CodeM初赛A轮]E
- CodeM美团 初赛A轮 C题 倒水
- codeM初赛B轮A题
- CodeM美团点评编程大赛初赛A轮 C.倒水【二分+分类讨论】
- CodeM美团 初赛A轮 A题 身体训练
- 美团CodeM 初赛 A轮 数列互质 莫队
- CodeM美团点评编程大赛初赛A轮
- 牛客网-美团CodeM初赛A轮 合并回文子串 区间DP
- CodeM美团点评编程大赛初赛A轮 数列互质
- CodeM美团点评编程大赛初赛A轮 B.合并回文子串【区间Dp】
- CodeM美团点评编程大赛初赛B轮 A.黑白树【树型Dp】
- codeM 初赛b轮 子串
- 【CodeM初赛A 5】数列互质 题解
- 【CodeM初赛A 6】二分图染色 题解
- 漫谈并发编程:Actor模型
- python单引号、双引号、三引号
- NAT技术与代理服务器
- 并转串模块设计
- 剑指offer——二叉搜索树的后序遍历序列(思路不错)
- [CodeM初赛A轮]C
- Swift学习之职责链模式详解
- Zabbix的安装
- pluralize方法
- WebView性能优化
- ios 移除UIView上所有的subViews
- 漫谈并发编程:用MPI进行分布式内存编程(入门篇)
- Java实现-旋转图像
- [CodeM初赛A轮]D