洛谷-语文成绩-[有奖]洛谷5月月赛:kkksc03的三大神器
题目背景 Background
语文考试结束了,成绩还是一如既往地有问题。
题目描述 Description
语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗?
//这又跟神器有什么关系呢?神说:呵呵。
//因为n和p的范围比较大 建议C++选手使用scanf读入.
//同时建议写读入优化....
//最后一个点,亲测pas读入800+ms,c/C++的scanf 1200+ms,所以这个点的时限改为2s
输入输出格式 Input/output
输入格式:
第一行有两个整数n,p,代表学生数与增加分数的次数。
第二行有n个数,a1~an,代表各个学生的初始成绩。
接下来p行,每行有三个数,x,y,z,代表给第x个到第y个学生每人增加z分。
输出格式:
输出仅一行,代表更改分数后,全班的最低分。
输入输出样例 Sample input/output
样例测试点#1 输入样例:
3 2
1 1 1
1 2 1
2 3 1
输出样例:
2
说明 description
对于40%的数据,有n<=1000
对于60%的数据,有n<=10000
对于80%的数据,有n<=100000
对于100%的数据,有n<=5000000,p<=n,学生初始成绩<=100,z<=100*/
思路:两个数组存储,循环相加就得了
代码如下:
1 #include <stdio.h> 2 int main() 3 { 4 long long n,p,i,t; 5 int b[24000];//代表给第x个到第y个学生每人增加z分。 6 long long k;//全班最低分 7 long long a[24000];//初始分数 8 scanf("%I64d%I64d",&n,&p); 9 /*=========================================*/ 10 for(i=0;i<n;i++)//输入初始分数 11 { 12 scanf("%d",&a[i]); 13 } 14 /*=========================================*/ 15 for(i=0;i<p*3;i++)//输入“代表给第x个到第y个学生每人增加z分” 16 { 17 scanf("%d",&b[i]); 18 } 19 /*=========================================*/ 20 for(i=0;i<p;i++) 21 { 22 for(t=b[i*3]-1;t<=b[i*3+1]-1;t++) 23 { 24 a[t]=a[t]+b[i*3+2]; 25 } 26 } 27 /*=========================================*/ 28 k=a[0]; 29 for(i=0;i<n;i++)//最低的分数 30 { 31 if(a[i]<k) k=a[i];//从前到尾扫一遍,发现一个小的,赋值 32 } 33 printf("\n%I64d\n",k);//输出最低分 34 return 0; 35 }
我不怕千万人阻挡,只怕自己投降…