NC21365. 配钥匙
描述
输入描述
题目有多组测试数据。第一行输入一个整数T(组数少于100组),表示测试数据组数,对于接下来每组测试数据:每组测试数据输入只有一行,分别为4个整数,表示n、m、A、B。
输出描述
对于每组测试数据:
在一行内输出一个整数,表示答案
示例1
输入:
1 5 2 2 3
输出:
8
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 612K, 提交时间: 2020-03-10 16:20:52
#include<bits/stdc++.h> using namespace std; int main() { long long n,m,a,b,t; cin>>t; while( t-- ) { cin>>n>>m>>a>>b; long long ans=n/m*b+(n%m)*a; ans=min(ans,a*n); ans=min(ans,(n+m-1)/m*b ); cout<<ans<<endl; } }
C 解法, 执行用时: 3ms, 内存消耗: 372K, 提交时间: 2021-08-19 15:35:10
main(){ int t,n,m,a,b,x,y,z; scanf("%d",&t); while(t--){ scanf("%d%d%d%d",&n,&m,&a,&b); x=n*a; y=n/m*b+n%m*a; y=x>y?y:x; z=(n+m-1)/m*b; printf("%d\n",z>y?y:z); } }
C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 480K, 提交时间: 2018-11-27 13:34:46
#include<bits/stdc++.h> using namespace std; int main() { int q; cin>>q; while(q--) { int n,m,a,b; cin>>n>>m>>a>>b; cout<<min(n*a,min((n+m-1)/m*b,(n/m)*b+(n%m)*a))<<endl; } }
Python3(3.5.2) 解法, 执行用时: 36ms, 内存消耗: 3448K, 提交时间: 2018-11-25 13:30:09
gg=int(input()) while gg: n,m,a,b=[int(x) for x in input().split()] if b/m>a:print(n*a) else:print(min(n//m*b+n%m*a,(n//m+1)*b)) gg-=1