H - 栀子花开

这是一个栀子花开的季节,也是一个离别的季节,四年一千多个日日夜夜,那校园的角角落落,留下了我们沉思的身影;那上百次的成绩排名表,印证了我们深深浅浅不断进步的轨迹,但是这些进步都离不开老师的谆谆教诲。

作为计算机系的学生,算法与数据结构是必修的主干课程,因此课程的每个老师都很关心每个学生的学习情况,每天下课老师都会给某个学生进行课外辅导。首先,老师会给每个学生一个能力评定分数,如果有学生要求老师给他辅导,那老师就会专门给该同学进行课外辅导,如果没有学生要求,老师就会给评定分数最低的同学课外辅导。老师给学生辅导后,学生的能力都会有所增长,然而不同的学生增长的情况都不同。老师想知道为学生课外辅导若干天后,全班的最低分学生的编号和分数。

Input

首先第一行为T,表示有T组数据。接下来为每组数据的结构:

第一行有一个数字n,表示有n个学生,编号从1到n。(1 <= n <= 10000)。

接下来一行有n个数,分别是编号从1到n的学生的初始能力水平xi,(1 <= xi <= 1000)。

接下来有一行有一个数m表示老师给学生课外辅导了m天(1 <= m <= 100000)。

接下来m行,每行两个数(ai bi),表示老师在第i天给编号为ai同学补课,编号为ai的同学能力提高了bi(0 <= ai <= n,1 <= bi <= 1000)。如果ai为0,则表示老师今天给能力最差的学生辅导。如果最低分同时有多个学生,就给编号小的学生补课。

Output

对于每组数据输出一行先输出组数(从1开始),接着最后输出经过m天后,全班的最低分学生的编号和分数。

Sample Input

1
3
10 20 30
3
0 100
3 10
0 40

Sample Output

Case 1: 3 40

Hint上面的数据,各个学生的能力增长情况如下:

第一天后:110 20 30

第二天后:110 20 40

第三天后:110 60 40

题解:

//简单模拟题
//题意:老师要持续几天对学生进行辅导,辅导对象有两种,第一种就是
//1、当学生不要求时,老师就会给评定分数最低的同学课外辅导
//2、如果有学生要求老师给他辅导,那老师就会专门给该同学进行课外辅导
//找到每一天辅导的对象,并使他的水平提高,最后在找出来那个最小的那个即可(不要问怎么找,for循环就可以<_>)

下面是代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define INF 0xffffff
using namespace std;
int max(int x,int y)
{
    return x>y ? x : y;
}
struct shudui
{
    int value;
} m[10005];
int main()
{
    int a,s,d,f,g,k=0;
    scanf("%d",&a);
    while(a--)
    {
        ++k;
        scanf("%d",&s);
        for(int i=1; i<=s; ++i)
            scanf("%d",&m[i].value);
        scanf("%d",&d);

        while(d--)
        {

            scanf("%d%d",&f,&g);
            if(f==0)
            {
                int temp=INF,ans;
                for(int i=1; i<=s; ++i)
                {
                    if(temp>m[i].value)
                        temp=m[i].value,ans=i;
                }
                m[ans].value+=g;
//                temp=INF,ans;
//                for(int i=1;i<=s;++i)
//                {
//                    if(temp>m[i].value)
//                        temp=m[i].value,ans=i;
//                }
//                printf("%d %d\n",ans,m[ans].value);
            }
            else
            {
                m[f].value+=g;
            }

        }
        printf("Case %d: ",k);
        int temp=INF,ans;
        for(int i=1; i<=s; ++i)
        {
            if(temp>m[i].value)
                temp=m[i].value,ans=i;
        }
        printf("%d %d\n",ans,m[ans].value);
    }
    return 0;
}

posted @ 2019-04-02 22:13  kongbursi  阅读(329)  评论(0编辑  收藏  举报