7 条题解
-
12
题解
点赞带走
AC代码
#include<bits/stdc++.h> using namespace std; long long a, b, m, n, t; int main() { cin >> t; for (int i = 0;i < t;i++) { cin >> a >> b >> n >> m; if (b * (m + 1) < a * m) { cout<< b * n << endl; } else if (b < a) { cout << n / (m + 1) * m * a + n % (m + 1) * b << endl; } else { cout << (n - n / (m + 1)) * a << endl; } } return 0; }
-
12
分三种情况讨论:
- 第二天买m+1公斤,比第一天买m公斤的花费还少:此时全都在第二天买。
- 不满足条件1,但是b比a小:此时先尽量多地在第一天买重量是m的倍数的苹果,并拿到赠送,然后剩下的在第二天买。
- 不满足条件1和条件2:此时全部在第一天买。
核心代码
if (b * (m + 1) < a * m) { cout << b * n << endl; } else if (b < a) { cout << n / (m + 1) * m * a + n % (m + 1) * b << endl; } else { cout << (n - n / (m + 1)) * a << endl; }
-
6
只需要找到两个特例,就很容易解决
#include <iostream> using namespace std; int main(void){ long long t,a,b,n,m,ans; //数值很大,要用long long cin>>t; for(int i=1;i<=t;i++){ ans=0; cin>>a>>b>>n>>m; if(a*m/(double)(m+1)>=b) //如果无论如何第一天都比第二天贵,就把m设为“无限” m=0xFFFFFFFFFFFF; if(a<b) //特例:第一天单价小于第二天 b=a; while(n>0){ //实际上顶多只需要执行两次 if(n>=m+1){ ans+=n/(m+1)*m*a; n%=m+1; } else{ ans+=n*b; n=0; } } cout<<ans<<endl; } return 0; }
-
2
记得点赞~~~~~~~~~~~~~~~
代码
#include <bits/stdc++.h> using namespace std;//宏定义,但我觉得long long不加unsigned也能过 #define ll unsigned long long ll n,a,b,m,cost; int t; int main() { cin >> t; for (int i = 1;i <= t;i++) { cost = 0;//每一组数据都需初始化 cin >> a >> b >> n >> m; if (a * m < b * (m+1))//如果第一天方案合适 {//这里用乘法原因是除法可能会出小数 int x; x = n / (m+1); cost += x * m * a;//先把能买的套装买下 x = n % (m+1); if (a < b)//如果单买第一天也便宜 { cost += x * a;//第一天结束 } else { cost += x * b; } } else { cost = b * n;//如果第二天稳稳胜过第一天 } cout << cost << endl; } return 0; }
-
-1
老毕登我又又又又来了
思路
很简单,也就是①第一天花m斤的钱,第二天需要(m+1)斤的钱。直接
if(b*(m+1)<a*m)
②也就是第一个条件不满足,但第二天便宜,很无奈,就尽可能多买第一天的(m+1)斤。
③都不满足,直接全部买第一天。
代码
#include <bits/stdc++.h> #define ll long long using namespace std; 反作弊 反作弊 反作弊 反作弊 反作弊 反作弊 ll t, a, b, n, m; 反作弊 反作弊反作弊反作弊反作弊 反作弊反作弊 反作弊反作弊 反作弊 反作弊 int main(){ 反作弊 反作弊 cin >> t; 反作弊 while(t--){ cin>>a>>b>>n>>m; 反作弊 反作弊 反作弊 if (b*(m+1)<a*m){ 反作弊 反作弊 cout<<b*n<<endl; } 反作弊 反作弊 else if(b<a){ cout<<n/(m+1)*m*a+n%(m+1)*b<<endl; } 反 作弊 反作弊 反作弊 else{ cout<<(n-n/(m+1))*a<<endl; } 反作弊 反作弊 反作弊 } return 0; }
想
食用的小伙伴注意啊,不要噎死啊 -
-8
#include <bits/stdc++.h> using namespace std; long long t,n,a,m,b; int main() { cin >> t; for(int i=1;i<=t;i++) { cin >> a >> b >> n >> m; if (b * (m + 1) < a * m) { cout << b * n << endl; } else if (b < a) { cout << n / (m + 1) * m * a + n % (m + 1) * b << endl; } else { cout << (n - n / (m + 1)) * a << endl; } } }
-
-8
`
#include <bits/stdc++.h> using namespace std; long long t,n,a,m,b; int main() { cin >> t; for(int i=1;i<=t;i++) { cin >> a >> b >> n >> m; if (b * (m + 1) < a * m) { cout << b * n << endl; } else if (b < a) { cout << n / (m + 1) * m * a + n % (m + 1) * b << endl; } else { cout << (n - n / (m + 1)) * a << endl; } } }
- 1
信息
- ID
- 256
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- (无)
- 递交数
- 663
- 已通过
- 409
- 上传者