洛谷-语文成绩-[有奖]洛谷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 }

 

posted @ 2015-05-02 21:38  Memoryヾノ战心  阅读(650)  评论(0编辑  收藏  举报