#include<cstdio> #include<algorithm>//用到sort using namespace std; struct Node{//金币结构体 int w,v;//w表示重量,v表示价值 }a[110]; int read(){//普通的快读,不解释 int x=0,f=1; char c=getchar(); while(c<'0'||c>'9'){ if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9'){ x=x*10+c-'0'; c=getchar(); } return x*f; } bool cmp(Node aa,Node bb){//定义排序方法 return aa.v*bb.w>aa.w*bb.v;//按性价比从高到低排序,为防止精度问题直接交叉相乘 } int main(){//主函数 int n=read(),m=read(); double ans=0;//记录答案 for(int i=1;i<=n;i++) a[i].w=read(),a[i].v=read(); sort(a+1,a+n+1,cmp);//排序 for(int i=1;i<=n;i++){//一次遍历 if(a[i].w<=m) ans+=a[i].v,m-=a[i].w;//够就全拿 else{//不够 ans+=a[i].v*m*1.0/(a[i].w*1.0);//拿上能拿的部分,注意强转double break;//直接退出循环 } } printf("%.2lf",ans);//保留2位小数 return 0;//华丽结束 }将上述代码转换为python语言
时间: 2024-02-18 19:59:29 浏览: 71
c++中的<cstdio>实现
以下是将上述代码转换为 Python 语言后的代码:
```python
n, m = map(int, input().split())
class Coin:
def __init__(self, w, v):
self.w = w
self.v = v
coins = []
for i in range(n):
w, v = map(int, input().split())
coins.append(Coin(w, v))
coins.sort(key=lambda x: x.v * 1.0 / x.w, reverse=True)
ans = 0
for i in range(n):
if coins[i].w <= m:
ans += coins[i].v
m -= coins[i].w
else:
ans += coins[i].v * m * 1.0 / coins[i].w
break
print('{:.2f}'.format(ans))
```
注意,Python 代码中没有快读函数,而是使用了 `input()` 函数读取输入。此外,Python 中没有结构体的概念,所以我们使用了一个类 Coin 来表示金币,其中 w 表示重量,v 表示价值。还需要注意的是,Python 中的列表排序函数 `sort()` 可以接受一个关键字参数 `key`,用于指定排序方法。这里我们使用了一个 lambda 函数来定义排序方法。最后,Python 中的格式化字符串函数 `format()` 用于保留小数位数。
阅读全文