题解
购买快乐水
1 条题解
-
0
解题思路
要去考 NOIP 啦,小童要给 n 位同学买快乐水。规则是:
- 每个人至少买 1 瓶;
- 如果这位同学坐学校大巴(t=1)而且愿意打狼(q=1),就可以多拿 1 瓶。
所以每个人买几瓶,可以由一个函数
func(t, q)来计算:- 先记下每个人都先有 1 瓶;
- 如果 t1 且 q1,就再加 1 瓶;
- 返回这个人需要的瓶数。
主程序把 n 个人需要的瓶数全部加起来,就是答案。
打个比方:老师发小贴纸,每个人都先发1张;只有"既坐大巴又愿意打狼"的"幸运儿"能多拿1张。数一数总共发出去多少张就行啦!
参考代码
// P4607 购买快乐水:每个人买1瓶,坐大巴且愿意打狼的人多买1瓶 #include <iostream> using namespace std; // func函数:计算一个人购买快乐水的数量 int func(int t, int q) { int x = 1; // 每个人都先买1瓶 if (t == 1 && q == 1) x++; // 坐大巴(t=1)且愿意打狼(q=1),多1瓶 return x; } int main() { int n, t, q, sum = 0; cin >> n; for (int i = 0; i < n; i++) { cin >> t >> q; sum += func(t, q); // 把每个人的瓶数累加起来 } cout << sum << endl; return 0; }复杂度分析
- 我们对 n 位同学每人处理一次,每次只做常数次判断,所以时间复杂度是 O(n)。
- 我们只用了几个变量,空间复杂度是 O(1)。
n 最大只有 20,程序瞬间就能算出答案。
- 1