FatMouse' Trade(sourtqsourt)

2024-06-01 03:48
文章标签 trade fatmouse sourtqsourt

本文主要是介绍FatMouse' Trade(sourtqsourt),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FatMouse' Trade

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 15   Accepted Submission(s) : 10
Font: Times New Roman | Verdana | Georgia
Font Size: ← →

Problem Description

FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.
The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.

Input

The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers J[i] and F[i] respectively. The last test case is followed by two -1's. All integers are not greater than 1000.

Output

For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of JavaBeans that FatMouse can obtain.

Sample Input

5 3
7 2
4 3
5 2
20 3
25 18
24 15
15 10
-1 -1

Sample Output

13.333
31.500

Author

CHEN, Yue
正确AC:

#include <cstdio>
#include <algorithm>
using namespace std;

struct node
{
 int be;
 int cat;
 double bl;
}t[100000];  //数组应大点

bool cmp(const node &a,const node &b)        //取地址很重要
{
 if(a.bl>b.bl)
        return true;
 return false;
}

int main()
{
 int n,m,i;
 double sum;
 while(~scanf("%d%d",&n,&m))
 {
  if(n==-1||m==-1)      break;
  for(i=0;i<m;i++)
  {
   scanf("%d%d",&t[i].be,&t[i].cat);
   t[i].bl=(double)t[i].be/t[i].cat;
  }
  sum=0;
  sort(t,t+m,cmp);
  for(i=0;i<m;i++)
  {
   if(n-t[i].cat>0)
   {
    sum+=t[i].be;
    n-=t[i].cat;
   }
  else
   {
    sum+=n*t[i].bl;
    break;
   }
  }
  printf("%.3f\n",sum);
  
 }
 return 0;
}

 

或者:

#include <cstdio>
#include <algorithm>
using namespace std;

struct node
{
 int be;
 int cat;
 double bl;
}t[100000];

bool cmp(const node &a,const node &b)
{
 if(a.bl>b.bl)
        return true;
 return false;
}

int main()
{
 int n,m,i;
 double sum;
 while(~scanf("%d%d",&n,&m))
 {
  if(n==-1||m==-1)      break;
  for(i=0;i<m;i++)
  {
   scanf("%d%d",&t[i].be,&t[i].cat);
   t[i].bl=(double)t[i].be/t[i].cat;
  }
  sum=0;
  sort(t,t+m,cmp);
  for(i=0;i<m;i++)
  {
   if(n>0&&n>=t[i].cat)
   {
    n-=t[i].cat;
    sum+=t[i].be;
    continue;
   }
   if(n>0&&n<t[i].cat)
   {
    sum+=n*t[i].bl;
    break;
   }
  }
  printf("%.3f\n",sum);
  
 }
 return 0;
}

 说明:

 bool cmp(const node &a,const node &b)

运算符重载的条件是,必须存在至少一个自定义的类型。
而指针实际上就是地址,即一个32位的整数值,它们的大小是直接进行数值的比较的
如果想比较2个指针所指的对象的大小,可以对它们取 * 操作,再调用 operator < 即可。
另外,楼主写的 operator < 重载,参数应设定为 const node &, 即
bool operator < (const node &a, const node &b)
{
...
}
按LZ的方式去写的话,每次调用 < 运算符时都会存在对象的拷贝。 
再者,结构体里面的成员,在默认情况下均是 public 的权限,不需要将 bool operator < 设置为结构体的友员函数,可以直接通过对象访问成员变量。
 
比较:
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
const int MAXN = 1010;
struct node
{
double j,f;
double r;
}a[MAXN];
/*
int cmp(const void *a,const void *b)//从大到小排序 
{
struct node *c=(node *)a;
struct node *d=(node *)b;
if(c->r > d->r) return -1;
else return 1;
}    */
bool cmp(node a,node b)
{
return a.r  >  b.r;
}    
int main()
{
int N;
double M;
double ans;
while(scanf("%lf%d",&M,&N))
{
if(M==-1&&N==-1) break;
for(int i=0;i<N;i++)
{
scanf("%lf%lf",&a[i].j,&a[i].f);
a[i].r=(double)a[i].j/a[i].f;
}    
//qsort(a,N,sizeof(a[0]),cmp);
        sort(a,a+N,cmp);
ans=0;
for(int i=0;i<N;i++)
{
if(M>=a[i].f)
{
ans+=a[i].j;
M-=a[i].f;
}    
else 
{
ans+=(a[i].j/a[i].f)*M;
break;
}    
}   
printf("%.3lf\n",ans); 
}    
return 0;
}    

这篇关于FatMouse' Trade(sourtqsourt)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1019904

相关文章

EE trade:辨别真假银5个实用的技巧

从古至今, 银器以其闪耀的光泽和高贵典雅的魅力, 深受人们喜爱。 然而, 由于银具有较高的市场价值, 也引来了一些不法商贩的仿造。 如何辨别真假银, 成为许多人关注的话题。 别担心, 今天我们就来揭秘5个简单实用的技巧, 助您轻松辨别真假银! 一、 感官辨别 1. 观察颜色: 真银的颜色呈银白色, 光泽柔和, 表面平滑细腻。 假银的颜色可能偏黄或偏灰, 光泽暗淡, 表面粗糙, 甚至有斑点或金属

Joy-Trade智能量化平台发起“日星悦易”的抽奖活动

Joy-Trade(悦交易)智能量化平台将于11月11日上午11点正式启动“日星悦易”的抽奖活动,通过星座文化为使投资者加深对投资运势把握,提升投资者的交易心态,活动将作为Joy-Trade量化交易的文化宣导。悦交易联席CEO Rocket表示:“星座在历史中是象征着一个人的性格和财运的具象化,很多人在投资的过程中总是过于焦虑,通过星座文化的活动我们想在这样紧张的氛围中给加密市场的投资者带来一些轻

hdu 1160 FatMouse's Speed(最长上升子序列 +记录路径)

http://acm.hdu.edu.cn/showproblem.php?pid=1160 题意:有若干只老鼠,给出每只老鼠的大小和速度。输出尽量多的老鼠的下标m1,m2,m3......满足下标对应的老鼠大小严格递增而老鼠速度严格递减。 思路:先对老鼠的速度从大到小排序,在对老鼠的大小求最长上升子序列。在这过程中,用pre[ ]记录路径。 #include <stdio.h>#in

FatMouse\' Trade -HUD1009

http://acm.hdu.edu.cn/showproblem.php?pid=1009 这题J[i]是可以分割的所以是一道贪心题。话说这道题我wrong了好几次才过。~第一次看没注意J[i]  F[i]都应该是double 类型的。 解题思路:贪心。先排序然后 最先用 以最少的猫食换取取最多的JavaBean的那个组合。 代码如下 #include<iostream>#incl

HDU1159——通用子序列,HDU1160——FatMouse的速度、HDU1165——艾迪的研究 II

HDU1159——通用子序列 题目描述 问题 - 1159 (hdu.edu.cn) 问题描述 给定序列的子序列是给定的序列,其中遗漏了一些元素(可能没有)。给定一个序列 X = <x1, x2, ..., xm>如果存在一个严格递增的 X 索引序列 <i1, i2, ..., ik>>,则另一个序列 Z = <z1, z2, ..., zk 是 X 的子序列,使得所有 j = 1

ee trade:黄金投资与股票投资的区别

黄金和股票, 是金融市场中两种常见的投资工具, 它们拥有截然不同的特点和风险, 了解它们的差异, 可以帮助投资者制定更合理的投资策略。 一、 投资性质: 避险与成长, 两种投资方向 黄金: 被视为避险资产和保值工具, 在经济不稳定或通货膨胀时期, 黄金通常能够保持其价值, 甚至增值。 股票: 代表的是对一家公司的所有权, 其价值与公司的业绩紧密相关。 股票投资更多地与公司的成长潜力和市场表现

EE trade:炒伦敦金的注意事项及交易指南

在贵金属市场中,伦敦金因其高流动性和全球认可度,成为广大投资者的首选。然而,在炒伦敦金的过程中,投资者需要注意一些关键点。南华金业小编带您一起来看看。 国际黄金报价 一般国际黄金报价会提供三个价格: 买价(Bid Price):对方申请买入的价格,即卖出价。 申卖价(Ask Price):对方申请卖出的价格,即买入价。 现价(Current Price):一个中间参考价,无实际交易意义。

EE trade:现货黄金交易时间与操作技巧

现货黄金作为当今最为热门的投资方式之一,其独特的交易机制和高收益潜力吸引了大量投资者的关注。对于新手投资者而言,可能对于现货黄金交易完全是一片空白。因此,了解现货黄金的交易时间和操作技巧、掌握基本投资知识,是至关重要的。本文将带您深入探讨现货黄金交易的基础知识和操作技巧,帮助您在投资过程中取得更加理想的表现。 一、现货黄金交易时间解析 现货黄金的一个显著特点是其24小时无间断的交易时间。不同于

hodj 1009 FatMouse' Trade--贪心算法

整体思路:整体思路就是以 JavaBean/CatFood比为基准,比值大的房间优先。使用结构体排序,结构体排序。 #include <iostream>#include <algorithm>#include <string>#include <map>#include <stdio.h>using namespace std;struct trade{double a;//Ja

hdu(1078) FatMouse and Cheese (记忆化搜索+dp)

/*第一次用记忆化搜索, 其实并不难,只不过在搜索的同时记住了在各个坐标的权值。 在这里题意是;在一个n*n的矩阵里,值是权值,在竖直或水平方向上 行走1--k步,全只要递增,不能重复走,到最后使其总权值和最大。 说白了就是找一个递增序列,使其总和值最大。。 */ 这一题综合了DFS和DP,很好的一道题。dp[i][j]表示以第i行第j列个 网格为起点所能得到的最大值,需要注意的是一次最多走k步