模拟计算就得了。具体来说:
- 首先当然要算商品价格 ,一个
for 循环和一个乘法即可解决
- 根据判断,如果
则总价就要加上运费 ,否则不管了。
- 输出即可。
ACCode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <bits/stdc++.h>
#define log printf
using namespace std;
const int N = 10010; int n, s, k, p[N], q[N], sum;
int main() { scanf("%d%d%d", &n, &s, &k); for (int i = 1; i <= n;i++) scanf("%d%d", &p[i], &q[i]), sum += p[i] * q[i]; if (sum < s) sum += k; log("%d\n", sum); return 0; }
|
AC 记录
B Glass and Mug
还是模拟,建俩变量模拟一遍得了。
玻璃杯和马克杯不是一个东西!赛时翻译插件卡了
人就是因为这个原因。
因此,请大家务必学好英语。
具体来说,我们维护马克杯的水量 和玻璃杯的水量 ,然后按照题目:
- 如果 ,那么 ;
- 否则如果 ,那么 ;
情况三比较复杂,我们额外引入两个变量:
表示马克杯能倒的量,也就是
本身。
表示玻璃杯需要的量,也就是 。
然后如果 ,也就是可以全部倒掉那当然就是全部倒了,,。
否则类似的,把玻璃杯倒满,,然后 。
ACCode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include <bits/stdc++.h>
#define log printf
using namespace std;
int k, g, m, gls, mug;
int main() { scanf("%d%d%d", &k, &g, &m); for (int i = 0;i < k;i++) { if (gls == g) gls = 0; else if (mug == 0) mug = m; else { int mug_can = mug, gls_need = g - gls; if (mug_can > gls_need) gls = g, mug -= gls_need; else if (mug_can < gls_need) mug = 0, gls += mug_can; else gls += gls_need, mug -= mug_can; } } log("%d %d\n", gls, mug); return 0; }
|
AC 记录
C T-shirts
又双叒叕是模拟。
仍然维护两个变量, 表示无
logo 的, 表示有 logo
的且洗了能穿的, 表示带 logo
的衣服总数(由于初始时只有无 logo
的,这也是需要购买的总数,也就是答案)。
然后逐天遍历:
- 空闲:洗掉,由于无印 logo 的质量不会变因此直接 ,;
- 吃饭:由于要尽量减少购买的带 logo 衣服,那么就要减少带 logo
衣服的消耗,那么当然就要优先穿无 logo 的,其次再穿有 logo
的,否则就只能再买了;
- 活动:同 2,但是不能穿无 logo 的了。
ACCode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include <bits/stdc++.h>
#define log printf
using namespace std;
int m, n, plain, logo, logo_have; string s;
int main() { cin >> n >> m >> s; plain = m; for (int i = 0; i < n; i++) { if (s[i] == '0') { plain = m; logo_have = logo; continue; } if (s[i] == '1') { if (plain > 0) plain--; else { if (logo_have > 0) logo_have--; else logo++; } } else { if (logo_have > 0) logo_have--; else logo++; } } log("%d\n", logo); return 0; }
|
AC 记录
讲了跟没讲一样。已修复这个质量过低的 bug。