NC216211. 爱偷懒的小明
描述
输入描述
第一行包含两个整数n, r,(1 <= n <= 100, r <= 1000)表示小明的学科数以及老师规定的平时分总和。接下来n行,每行包含3个整数 ai, bi ,ci(1 <= ai <= ci <= 1000, 1 <= bi <= 1000),分别表示小明原有的平时分,第i门课加一分所需要补交作业的次数以及第i门课的平时分上限,数据保证 ∑ci 大于 r
输出描述
最少需要补交作业的次数
示例1
输入:
2 30 10 3 40 10 2 40
输出:
20
说明:
小明补交第2门课程20次作业,课程的平时分总和变为20 + 10 = 30,达到了老师的要求 。pypy3 解法, 执行用时: 114ms, 内存消耗: 25824K, 提交时间: 2021-12-09 18:27:13
n , r = map( int , input().split( ' ' ) ) s = [] for i in range( 0 , n ): a , b , c = map( int , input().split( ' ' ) ) r -= a c -= a s.append( ( b , c ) ) s.sort() res = 0 for i in range( 0 , n ): if r >= s[i][1]: r -= s[i][1] res += s[i][0] * s[i][1] else : res += s[i][0] * r break; print( res )
C++(clang++11) 解法, 执行用时: 7ms, 内存消耗: 412K, 提交时间: 2021-01-26 19:02:34
#include<bits/stdc++.h> using namespace std; int n, r, f[1111], ans, a, b, c; int main() { scanf("%d%d", &n, &r); for(int i = 0; i < n; i++) scanf("%d%d%d", &a, &b, &c), f[b] += c - a, r -= a; for(int i = 0; i < 1001 && r > 0; i++) while(f[i] && r > 0) ans += i, f[i]--, r--; printf("%d", ans); }
Python3 解法, 执行用时: 43ms, 内存消耗: 4620K, 提交时间: 2021-12-21 19:33:02
n,r=map(int,input().split()) m=[] s=0 for i in range(n): a,b,c=map(int,input().split()) m.append((a,b,c)) s+=a m.sort(key=lambda x:x[1]) a=0 for i in m: if s+i[2]-i[0]>=r: a+=i[1]*(r-s) break else: s+=i[2]-i[0] a+=i[1]*(i[2]-i[0]) print(a)