PAT 1033 To Fill or Not to Fill 贪心
2014-08-29 23:42
369 查看
PAT少有的思维题...
#include<cstdio> #include<iostream> #include<cstring> #include<vector> #include<algorithm> using namespace std; struct node { double p,dis; }e[550]; bool cmp(node x,node y) { return x.dis<y.dis; } int main() { int n,i,j; double m,d,dd,ans; cin>>m>>d>>dd>>n; for(i = 1;i<=n;i++)cin>>e[i].p>>e[i].dis; e[++n].dis = d; e .p = 0.0; sort(e+1,e+n+1,cmp); if(e[1].dis!=0) { printf("The maximum travel distance = 0.00\n"); return 0; } int f = 0,ps; double lft = 0; for(i = 1;i<n;i++) { if((e[i+1].dis-e[i].dis)>m*dd) { f = 1; ps = i; break; } int ii = i+1; while((e[ii].dis-e[i].dis)<=m*dd&&e[ii].p>e[i].p)ii++; if((e[ii].dis-e[i].dis)>m*dd)ii--; if(e[ii].p<e[i].p) { double nd = (e[ii].dis-e[i].dis)/dd; if(lft<nd) { ans+=(nd-lft)*e[i].p; lft = nd-(e[i+1].dis-e[i].dis)/dd; } else lft-=(e[i+1].dis-e[i].dis)/dd; } else { ans+=(m-lft)*e[i].p; lft = m-(e[i+1].dis-e[i].dis)/dd; } } if(f)printf("The maximum travel distance = %.2f\n",e[ps].dis+m*dd); else printf("%.2f\n",ans); return 0; }
相关文章推荐
- 1033. To Fill or Not to Fill (25)【贪心+模拟】——PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise 1033 To Fill or Not to Fill (25)
- PAT 1033 To Fill or not Fill
- Pat(Advanced Level)Practice--1033(To Fill or Not to Fill)
- pat 1033 To Fill or Not to Fill(值得重点回顾)
- PAT (Advanced Level) Practise 1033 To Fill or Not to Fill (25)
- 【C++】PAT (advanced level)1033. To Fill or Not to Fill (25)*
- pat甲级-1033-To Fill or Not to Fill
- 【PAT 1033】To Fill or Not to Fill
- pat 1033 To Fill or Not to Fill
- 1033. To Fill or Not to Fill (25)-PAT甲级真题
- 1033. To Fill or Not to Fill (25)-PAT
- 【PAT 1033】 To Fill or Not to Fill 贪心算法&模拟
- 1033 . To Fill or Not to Fill (25) (想明白了没写出来,参考吧)
- 1033. To Fill or Not to Fill
- 贪心算法题目:To Fill or Not to Fill
- To Fill or Not to Fill (九度贪心题目)
- 1033. To Fill or Not to Fill (25)
- 1033. To Fill or Not to Fill (25)
- 1033. To Fill or Not to Fill (25)