首页 > 其他分享 >语文成绩(差分)

语文成绩(差分)

时间:2024-11-17 16:19:36浏览次数:1  
标签:... 语文 le arr 差分 brr diff 成绩

语文成绩

题目背景

语文考试结束了,成绩还是一如既往地有问题。

题目描述

语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗?

输入格式

第一行有两个整数 \(n\),\(p\),代表学生数与增加分数的次数。

第二行有 \(n\) 个数,\(a_1 \sim a_n\),代表各个学生的初始成绩。

接下来 \(p\) 行,每行有三个数,\(x\),\(y\),\(z\),代表给第 \(x\) 个到第 \(y\) 个学生每人增加 \(z\) 分。

输出格式

输出仅一行,代表更改分数后,全班的最低分。

样例 #1

样例输入 #1

3 2
1 1 1
1 2 1
2 3 1

样例输出 #1

2

提示

对于 \(40\%\) 的数据,有 \(n \le 10^3\)。

对于 \(60\%\) 的数据,有 \(n \le 10^4\)。

对于 \(80\%\) 的数据,有 \(n \le 10^5\)。

对于 \(100\%\) 的数据,有 \(n \le 5\times 10^6\),\(p \le n\),学生初始成绩 $ \le 100\(,\)z \le 100$。






题解

一遍过什么的也太爽了吧? ˃̶͈ ꇴ ˂̶͈

差分

毕竟是第一次学差分,还是讲一下差分的概念:

对于一个数组arr[ i ],差分即是diff[ i ] = arr[ i ] - arr[ i - 1 ]。(其中arr[ 0 ] = 0)

依此定义,通过 前缀和 可以将 差分 转换成 原数组。如下。

arr[0] = diff[0] = 0;
arr[1] = diff[1] + diff[0];
arr[2] = diff[2] + diff[1] + diff[0];
arr[3] = diff[3] + diff[2] + diff[1] + diff[0];
arr[4] = diff[4] + diff[3] + diff[2] + diff[1] + diff[0];
... ...

借此,我们可以轻松利用 差分 来批量调节原数组的数据。
例如:将 diff[ 2 ] 增加 2。会有如下效果。(brr[ i ]为新数组)

brr[0] = arr[0]     = diff[0] = 0;
brr[1] = arr[1]     = diff[1] + diff[0];
brr[2] = arr[2] + 2 = diff[2] + 2 diff[1] + diff[0];
brr[3] = arr[3] + 2 = diff[3] + diff[2] + 2 diff[1] + diff[0];
brr[4] = arr[4] + 2 = diff[4] + diff[3] + diff[2] + 2 + diff[1] + diff[0];
... ...

可见原数组从 arr[ 2 ] 这项开始,每项都增加了2。

我们也可以让diff[ 4 ] 减去2,来确保只有arr[ 2 ]和arr[ 3 ]的数据发生变化。

brr[0] = arr[0]     = diff[0] = 0;
brr[1] = arr[1]     = diff[1] + diff[0];
brr[2] = arr[2] + 2 = diff[2] + 2 diff[1] + diff[0];
brr[3] = arr[3] + 2 = diff[3] + diff[2] + 2 diff[1] + diff[0];
brr[4] = arr[4]     = diff[4] - 2 + diff[3] + diff[2] + 2 + diff[1] + diff[0];
brr[5] = arr[5]     = diff[5] + diff[4] - 2 + diff[3] + diff[2] + 2 + diff[1] + diff[0];
... ...

代码

#include <iostream>
using namespace std;

const int MAXN = 5 * 1e6 + 10;

int arr[MAXN], diff[MAXN];
int main()
{
	int n, p;// n为学生数,p为加分次数
	scanf("%d%d", &n, &p);

	// 输入每个学生的初始成绩,并计算差分数组
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &arr[i]);
		diff[i] = arr[i] - arr[i - 1];
	}

	while (p--)
	{
		int x, y, z; //x表示起始学生,y表示结束学生,z表示增加的分数
		scanf("%d%d%d", &x, &y, &z);

		diff[x] += z; // 从第x个学生的成绩开始增加z
		diff[y + 1] -= z;// 从第y+1个学生的成绩开始减少z,确保只对x到y的学生有效
	}

	int min = 100; 
	int tmp = 0;// 临时变量,用来累计当前成绩
	for (int i = 1; i <= n; i++)
	{
		tmp += diff[i];

		// 更新最小成绩
		min = (min < tmp) ? min : tmp;
	}
	printf("%d\n", min);
	return 0;
}

标签:...,语文,le,arr,差分,brr,diff,成绩
From: https://www.cnblogs.com/phuzzz/p/18550681

相关文章

  • luogu P2376 语文成绩
    语文成绩题目背景语文考试结束了,成绩还是一如既往地有问题。题目描述语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗?输入格式第一行有两个整数\(n\),\(p\),代表学生数与增加分数的次数。......
  • 语文成绩
    语文成绩(https://www.luogu.com.cn/record/189365158)题目描述语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗?输入格式第一行有两个整数n,p,代表学生数与增加分数的次数。第二行有n个数,a1......
  • ssm124田径运动会成绩管理系统的设计与实现+vue(论文+源码)_kaic
     毕业设计(论文)  田径运动会成绩管理系统的设计与实现学生姓名   XXX                        学    号   XXXXXXXX          分院名称   XXXXXXXX          专业班级   XXX......
  • ssm125四六级报名与成绩查询系统+jsp(论文+源码)_kaic
     毕业设计(论文)题目:四六级报名与成绩查询系统的设计与实现      摘 要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对四六级报名信息管理混......
  • Atcoder ABC 216 G 01Sequence 题解 [ 蓝 ] [ 差分约束 ]
    01Sequence:比较板的差分约束,但有一个很妙的转化。朴素差分约束设\(x_i\)表示第\(i\)位的前缀和。我们要最小化\(1\)的个数,就要求最小解,就要求最长路。因为约束条件都是大于等于号,所以求最长路才能满足所有条件。求最大解也是同理。我们可以对于每一个条件,列出如下不等式......
  • 基于ssm+vue.js体育竞赛成绩管理系统的附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SSM前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 差分约束的一些理解
    一般的转化不等式+建图+判断负环不加赘述图是否连通如果图不连通,那么证明约束条件并不能全部约束有两种办法解决这个问题建超级源点将每个点作为起点跑求dis的最大值/最小值对于Intervals最后考虑求\(dis\)的最大值对于LayoutG,和Capitalism最后要......
  • JavaScript题目一 根据成绩给出学生考评
            根据学生的成绩给出考评,可以通过if或switch语句来实现。下面是一个简单的JavaScript代码示例,根据学生的成绩返回不同的评语。示例代码:functionevaluateStudent(score){letevaluation;if(score>=90){evaluation='优秀';}else......
  • C小题目:有一个一维数组score,放10个学生的成绩,求平均成绩。
    #include<stdio.h>intaverage(intx[],intlen){inti,sum=0;for(i=0;i<len;i++){sum+=x[i];printf("%d\n",x[i]);};inta=sum/len;printf("theaverageis%d\n",a);};intmain(){......
  • 教资成绩出来了,果然没有全过
    教师资格证考试成绩出来了,有一科没有过,出乎我的意料,我以为全军覆没了。马上38了,自己也算大龄程序员了。所以今年开始就一直在考虑退路了。思来想去,关注到了信奥这个赛道。4月份公众号开始发信奥相关的文章,也在教资报名的时候去报了个名,想着有个教资证书,也能给自己教学生带来一......