diff options
author | Franciszek Malinka <franciszek.malinka@gmail.com> | 2021-10-05 21:49:54 +0200 |
---|---|---|
committer | Franciszek Malinka <franciszek.malinka@gmail.com> | 2021-10-05 21:49:54 +0200 |
commit | c5fcf7179a83ef65c86c6a4a390029149e518649 (patch) | |
tree | d29ffc5b86a0d257453cedcf87d91a13d8bf3b0d /semestr-4/sieci/warsztaty8/mie1.cpp | |
parent | f8a88b6a4aba1f66d04711a9330eaba49a50c463 (diff) |
Duzy commit ze smieciami
Diffstat (limited to 'semestr-4/sieci/warsztaty8/mie1.cpp')
-rw-r--r-- | semestr-4/sieci/warsztaty8/mie1.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/semestr-4/sieci/warsztaty8/mie1.cpp b/semestr-4/sieci/warsztaty8/mie1.cpp new file mode 100644 index 0000000..f7eef7e --- /dev/null +++ b/semestr-4/sieci/warsztaty8/mie1.cpp @@ -0,0 +1,64 @@ +#include <cstdio> +#include <algorithm> +#include <cmath> +using namespace std; + +#define EPS 0.000001 + +int main() { + int numLiquids, reqCon, liquid[101]; + double sumSubst=0, sumLiquid=0, actCon; + + fill(liquid,liquid+101,0); + + scanf("%d%d",&numLiquids,&reqCon); + + for (int i=0;i<numLiquids;i++) { + int con, amount; + + scanf("%d%d",&con,&amount); + + liquid[con]+=amount; + sumSubst+=(double)(amount*con)/100; + sumLiquid+=(double)amount; + } + + if (sumLiquid==0) { + printf("0.000\n"); + return 0; + } + + actCon=(sumSubst/sumLiquid)*100; + + for (int i=0;i<=100;i++) { + if ((actCon<(double)reqCon)&&(liquid[i]>0)) { + double perc=(double)i/100, toSub=(double)((double)reqCon*sumLiquid-100*sumSubst)/((double)reqCon-(double)100*perc); + + toSub=min(toSub,(double)liquid[i]); + + sumLiquid-=toSub; + sumSubst-=(toSub*i)/100; + } + if ((actCon>(double)reqCon)&&(liquid[100-i]>0)) { + double perc=(double)(100-i)/100, toSub=(double)((double)reqCon*sumLiquid-100*sumSubst)/((double)reqCon-(double)100*perc); + + toSub=min(toSub,(double)liquid[100-i]); + + sumLiquid-=toSub; + sumSubst-=(toSub*(100-i))/100; + } + + if (sumLiquid==0) { + printf("0.000\n"); + return 0; + } + actCon=(sumSubst/sumLiquid)*100; + + if (fabs((double)reqCon-actCon)<EPS) + break; + } + + printf("%.3lf\n",sumLiquid); + + return 0; +} |