c++程序:初一某班有n位同学,学号1~n,新学期开始大家相互不认识,两两之间的好感度均为0。 这一个学期内发生了很多事情,影响着人与人之间的好感度。例如当a对b做了好事,b对a的好感度会增加;当a对b做了坏事,b对a的好感度会减少。 老师希望能在每件事情发生后,统计当下同学间好感度的最大值,你能帮他完成吗? 注意:好感度不是相互的,a对b的好感度可以不等于b对a的好感度。 输入 第一有两个正整数 n,m。分别表示人数和事情的个数。 接下来有 m 行,每行四个整数op,a,b,c,op为1表示做了好事,op为0表示做了坏事, c描述事情的好感度值,例如1 3 5 6,表示 3 号同学对 5 号同学做了好感度为6的好事。 2≤n,m≤100,1≤a,b≤n,1≤c≤100。 输出 输出共 m 行,若第i件事情发生以后,当前同学间好感度的最大值。
为了实现这个任务,我们可以使用一个二维数组来存储每个同学之间的当前好感度。每当发生一件事情时,我们更新相应的好感度,并计算当前所有同学之间好感度的最大值。以下是完整的C++代码实现: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, m; cin >> n >> m; // 初始化好感度矩阵,初始值为0 vector<vector<int>> goodFeeling(n + 1, vector<int>(n + 1, 0)); for (int i = 0; i < m; ++i) { int op, a, b, c; cin >> op >> a >> b >> c; // 更新好感度 if (op == 1) { goodFeeling[b][a] += c; } else { goodFeeling[b][a] -= c; } // 计算当前好感度的最大值 int maxGoodFeeling = 0; for (int j = 1; j <= n; ++j) { for (int k = 1; k <= n; ++k) { if (goodFeeling[j][k] > maxGoodFeeling) { maxGoodFeeling = goodFeeling[j][k]; } } } // 输出当前好感度的最大值 cout << maxGoodFeeling << endl; } return 0; } ``` 代码解释 1. 输入读取: - 首先读取两个整数 `n` 和 `m`,分别表示人数和事件的数量。 - 然后读取 `m` 行事件,每行包含四个整数 `op`, `a`, `b`, `c`。 2. 好感度矩阵初始化: - 使用一个二维向量 `goodFeeling` 来存储每个同学之间的当前好感度,初始值为0。 3. 事件处理: - 对于每个事件,根据 `op` 的值(1表示做好事,0表示做坏事)更新 `goodFeeling[b][a]`。 - 如果 `op` 为1,则 `goodFeeling[b][a]` 增加 `c`。 - 如果 `op` 为0,则 `goodFeeling[b][a]` 减少 `c`。 4. 计算最大好感度: - 每次事件处理后,遍历整个 `goodFeeling` 矩阵,找到当前的最大好感度值。 5. 输出结果: - 每次事件处理后,输出当前的最大好感度值。 复杂度分析 - 时间复杂度:每次事件处理的时间复杂度为 \(O(n^2)\),因为需要遍历整个 `goodFeeling` 矩阵来找到最大值。总的事件数量为 `m`,所以总的时间复杂度为 \(O(m \cdot n^2)\)。 - 空间复杂度:使用了一个 \(n \times n\) 的二维数组来存储好感度,空间复杂度为 \(O(n^2)\)。 这个实现方法在给定的约束条件下(\(2 \leq n, m \leq 100\))是可行的。 [2024-10-17 16:07:21 | AI写代码神器 | 726点数解答]
- [字节豆包] c语音 定义一个结构体student,其中包含的成员为char no[10];char name[10];float score。设有5个学生,从键盘输入其信息,按成绩的升序排序。并输出这5个学生排序后的信息。 输入格式: "%s%s%f" 输出格式: "请输入第%d位同学的信息:姓名 学号 成绩\n" "%s,%s,%.0f\n" 输入样例: 张三 10001 98↙ 李四 10002 100↙ 王五 10003 95↙ 赵六 10004 99↙ 钱七 10005 93↙ 输出样例: 请输入第1位同学的信息:姓名 学号 成绩↙ 请输入第2位同学的信息:姓名 学号 成绩↙ 请输入第3位同学的信息:姓名 学号 成绩↙ 请输入第4位同学的信息:姓名 学号 成绩↙ 请输入第5位同学的信息:姓名 学号 成绩↙ 钱七,10005,93↙ 王五,10003,95↙ 张三,10001,98↙ 赵六,10004,99↙ 李四,10002,100↙(373点数解答 | 2024-10-30 00:37:20)336
- [字节豆包] 定义一个结构体student,其中包含的成员为char no[10];char name[10];float score。设有5个学生,从键盘输入其信息,按成绩的升序排序。并输出这5个学生排序后的信息。 输入格式: "%s%s%f" 输出格式: "请输入第%d位同学的信息:姓名 学号 成绩\n" "%s,%s,%.0f\n" 输入样例: 张三 10001 98 李四 10002 100 王五 10003 95 赵六 10004 99 钱七 10005 93 输出样例: 请输入第1位同学的信息:姓名 学号 成绩 请输入第2位同学的信息:姓名 学号 成绩 请输入第3位同学的信息:姓名 学号 成绩 请输入第4位同学的信息:姓名 学号 成绩 请输入第5位同学的信息:姓名 学号 成绩 钱七,10005,93 王五,10003,95 张三,10001,98 赵六,10004,99 李四,10002,100(354点数解答 | 2024-10-30 18:45:58)272
- [字节豆包] c语言定义一个结构体student,其中包含的成员为char no[10];char name[10];float score。设有5个学生,从键盘输入其信息,按成绩的升序排序。并输出这5个学生排序后的信息。 输入格式: "%s%s%f" 输出格式: "请输入第%d位同学的信息:姓名 学号 成绩\n" "%s,%s,%.0f\n" 输入样例: 张三 10001 98↙ 李四 10002 100↙ 王五 10003 95↙ 赵六 10004 99↙ 钱七 10005 93↙ 输出样例: 请输入第1位同学的信息:姓名 学号 成绩↙ 请输入第2位同学的信息:姓名 学号 成绩↙ 请输入第3位同学的信息:姓名 学号 成绩↙ 请输入第4位同学的信息:姓名 学号 成绩↙ 请输入第5位同学的信息:姓名 学号 成绩↙ 钱七,10005,93↙ 王五,10003,95↙ 张三,10001,98↙ 赵六,10004,99↙ 李四,10002,100↙(373点数解答 | 2024-10-31 19:49:58)261
- [字节豆包] c语音定义一个结构体student,其中包含的成员为char no[10];char name[10];float score。设有5个学生,从键盘输入其信息,按成绩的升序排序。并输出这5个学生排序后的信息。 输入格式: "%s%s%f" 输出格式: "请输入第%d位同学的信息:姓名 学号 成绩\n" "%s,%s,%.0f\n" 输入样例: 张三 10001 98↙ 李四 10002 100↙ 王五 10003 95↙ 赵六 10004 99↙ 钱七 10005 93↙ 输出样例: 请输入第1位同学的信息:姓名 学号 成绩↙ 请输入第2位同学的信息:姓名 学号 成绩↙ 请输入第3位同学的信息:姓名 学号 成绩↙ 请输入第4位同学的信息:姓名 学号 成绩↙ 请输入第5位同学的信息:姓名 学号 成绩↙ 钱七,10005,93↙ 王五,10003,95↙ 张三,10001,98↙ 赵六,10004,99↙ 李四,10002,100↙(326点数解答 | 2025-01-01 20:11:47)250
- [字节豆包] 题目描述 小 S 喜欢连在一起的数字,如果这些数字的和很大就更好了。 所以她现在要给你一个 n 行 n 列的网格 A,第 i 行第 j 列上填有一个整数 Ai,j。 接下来你可以在 A 上任取一行、一列或一条与任意对角线平行且只经过网格交叉点的 直线(注意,不是线段),满足经过至少一个数字,且经过的数字之和最大。 如果对上面的表述有疑惑,请参考样例解释辅助理解。 你需要告诉小 S 这个最大的数字之和。 输入格式 输入共 n+1 行。 第一行,一个正整数 n,表示方阵的行数、列数。 接下来 n 行,每行 n 个用空格隔开的整数,其中第 i 行第 j 个整数表示 Ai,j。 输出格式 输出一行一个整数,表示最大的数字之和。 输入输出样例 输入 #1 3 1 1 1 2 2 2 3 3 3 输出 #1 9 输入 #2 3 -1 1 2 4 0 3 1 9 2 输出 #2 13 输入 #3 3 -1 -1 -1 -1 -1 -1 -1 -1 -1 输出 #3 -1 输入 #4 3 -100 -10 -100 -10 99(973点数解答 | 2025-11-26 20:07:06)17
- [字节豆包] 请你补全代码,把数组a的所有元素都赋值为100。 输入: 无 输出: 共二十行,每行一个整数,为数组中的每个数。 输入样例: 无 输出样例: 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100#include <iostream> using namespace std; int main() { int a[20]; for ( ) { } for (int i = 0; i < 20; i++) { cout << a[i] << endl; } return 0; }(164点数解答 | 2025-11-01 19:14:57)37
- [DeepSeek] 题目描述 对于一个数字字符串,如果它满足偶数下标处的数字为偶数且奇数下标处的数字为质数(下标从 0 开始,从左往右依次增大),我们称这它为“好数字”。 比如:"2582" 是“好数字”,因为偶数下标处的数字(下标为 0 的数字为 2、下标为 2 的数字为 8)是偶数,奇数下标处的数字(下标为 1 的数字为 5、下标为 3 的数字为 2)为质数。 但 "3245" 不是“好数字”,因为 3 在偶数下标处但不是偶数。 给你一个整数 n,请你返回长度为 n 且为“好数字”的数字字符串的个数。 由于答案可能会很大,请你将它对 10^9+7 取余后返回 。 注:一个数字字符串是指每一位都由 0 到 9 组成的字符串,且可能包含前导 0 。 输入描述 一个正整数,表示数字字符串的长度 n。 输出描述 一个正整数,表示最终的结果。 样例1 输入 1 输出 5 样例2 输入 5 输出 2000 样例3 输入 50 输出 564908303 提示 对于 100% 的数据,1≤n≤10^9。 请用C++语言完成(457点数解答 | 2025-07-21 17:46:17)128
- [DeepSeek] 题目描述 对于一个数字字符串,如果它满足偶数下标处的数字为偶数且奇数下标处的数字为质数(下标从 0 开始,从左往右依次增大),我们称这它为“好数字”。 比如:"2582" 是“好数字”,因为偶数下标处的数字(下标为 0 的数字为 2、下标为 2 的数字为 8)是偶数,奇数下标处的数字(下标为 1 的数字为 5、下标为 3 的数字为 2)为质数。 但 "3245" 不是“好数字”,因为 3 在偶数下标处但不是偶数。 给你一个整数 n,请你返回长度为 n 且为“好数字”的数字字符串的个数。 由于答案可能会很大,请你将它对 10^9+7 取余后返回 。 注:一个数字字符串是指每一位都由 0 到 9 组成的字符串,且可能包含前导 0 。 请用C++语言以及快速幂完成 输入描述 一个正整数,表示数字字符串的长度 n。 输出描述 一个正整数,表示最终的结果。 样例1 输入 1 输出 5 样例2 输入 5 输出 2000 样例3 输入 50 输出 564908303 提示 对于 100% 的数据,1≤n≤10^9。(488点数解答 | 2025-07-21 17:50:31)155
- [字节豆包] 现有 n n 个正整数,乌拉乎想要快速从这些数中找到第 x x 个数字,请你帮助乌拉乎编写一个程序,实现对应的功能吧。 输入格式 输入包含三行, 第一行,一个正整数 n n。 第二行,依次为 n n个 正整数 a [ i ] a[i]。 第三行,一个正整数 x x。 输出格式 输出这 n n 个数中的第 x x 个数。 input1 复制 3 4 6 2 2 output1 复制 6 input2 复制 5 3 1 1 2 3 5 output2 复制 3 提示 注意 序号和数组下标 的对应关系,如果需要使用 a [ 100 ] a[100] ,那么定义数组时至少需要定义为 int a [ 101 ] a[101]; 数据规模与约定 对于 100 % 100% 的数据, 1 ≤ x ≤ n ≤ 100 1≤x≤n≤100, 1 ≤ a [ i ] ≤ 100 1≤a[i]≤100。c++(380点数解答 | 2025-11-08 19:23:39)52
- [字节豆包] c++ 小核桃破解了大门的密码,门上开始显示一个进度条。请你帮助小核桃补全代码,输入n,如果n是10的倍数,输出n%;再判断如果n是100,额外输出"完成!"。 输入: 一个整数n(0<=n<=100)。 输出: 如果n是10的倍数,输出n%;再判断如果n是100,额外输出"完成!"。(注意,感叹号为英文感叹号)(320点数解答 | 2025-11-28 19:40:52)12
- [字节豆包] c++ 小核桃破解了大门的密码,门上开始显示一个进度条。请你帮助小核桃补全代码,输入n,如果n是10的倍数,输出n%;再判断如果n是100,额外输出"完成!"。 输入: 一个整数n(0<=n<=100)。 输出: 如果n是10的倍数,输出n%;再判断如果n是100,额外输出"完成!"。(注意,感叹号为英文感叹号) (338点数解答 | 2025-11-28 19:42:04)12
- [字节豆包] 7955: 【C3】星际编码大赛:逆序争霸 时间限制: 1 Sec 内存限制: 128 MB 提交: 0 解决: 33 [提交][状态][命题人:zhangyinwei] 题目描述 在银河系年度编程巅峰赛的决赛舞台上,来自机械星的AI选手TX-007和植根于生物科技的异星人选手索菲亚迎来了终极对决。本届压轴题竟是古老地球文献中记载的经典算法问题——「逆序对」统计。 赛事光幕显现出题目细节:给定一个可变长度正整数序列,逆序对定义为序列中位置靠前的数字严格大于位置靠后的数字(即存在下标i<j且a_i>a_j)。 "注意序列可能存在重复元素!"主裁判——由全息粒子构成的上届冠军提醒道。这句话让索菲亚的触须微微颤动,她曾在训练中因重复值处理失误而错失练习赛冠军。而TX-007的电子眼已经浮现出归并排序算法的流程图,金属手指在能量键盘上蓄势待发。 输入 第一行,一个数 n,表示序列中有 n 个数。 第二行 n 个数,表示给定的序列。序列中每个数字不超过 10^9。 输出 输出序列中逆序对的数目。 样例输入 6 5 4 2 6 3 1 样例输出 11 提示 对于 25% 的数据(509点数解答 | 2025-04-19 17:33:00)206