【每日练习】2

华为2016年机试题目(共2题)

时间限制:1秒

空间限制:65536K

老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.

输入描述:

输入包括多组测试数据。
每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。
学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。

 

输出描述:

对于每一次询问操作,在一行里面输出最高成绩.

 

输入例子1:

5 7
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 4 5
U 2 9
Q 1 5

 

输出例子1:

5
6
5
9

 

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
//okban
double get_MaxScore(vector<double > &Score,int num1,int num2);
int LetLaterToBeBefore(vector<double > &Score,int num1,int num2);
int GetScore(vector<char > &ScoreStr,vector<double > &Score);

int main()
{
//    时间限制:1秒

//    空间限制:65536K

//    老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。
//    当然,老师有时候需要更新某位同学的成绩.

//    输入描述:
//    输入包括多组测试数据。
//    每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),
//    分别代表学生的数目和操作的数目。
//    学生ID编号从1编到N。
//    第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
//    接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
//    当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
    int N;
    int M;

    int j = 0;
    int num1,num2;//存储'Q'or'C'后边的两个正整数
    double Max_Score;//存储'Q'后的最高分
    char flagAlp;

    vector<double > Score;
    vector<char > ScoreChar;
    vector<double > ans;
    string ScoreStr;

    while(1){
        cin >> N >> M;
        cin.ignore();
        if(N <= 0 || N > 30000 || M <= 0 || M > 5000){
            return 0;
        }

        getline(cin,ScoreStr);
    //    cout << ScoreStr << endl;
        for(vector<char>::size_type i = 0;i < ScoreStr.size();i++)
            ScoreChar.push_back(ScoreStr[i]);
    //    for(auto i :ScoreChar)
    //        cout << i << endl;

    //    cout << "hello1" << endl;
        if(GetScore(ScoreChar,Score))//将第二行输入的分数字符串转换为对应的分数数组
            return 0;

    //    cout << "hello2" << endl;
    //    for(auto i : Score)
    //        cout << i << endl;
    //    cout << "hello3" << "Score.size()" << Score.size() << endl;

        while(j < M){
            cin >> flagAlp >> num1 >> num2;//输入第三行....

            if(flagAlp == 'Q'){
                Max_Score = get_MaxScore(Score,num1,num2);
    //            cout << "Max_Score:" << Max_Score << endl;
                ans.push_back(Max_Score);
            }
            if(flagAlp == 'U')
                if(LetLaterToBeBefore(Score,num1,num2))
                    return 0;
            j++;
        }
        for(decltype(ans.begin()) i = ans.begin();i != ans.end();i++)
            cout << *i << endl;
    }
    return 0;
}

int GetScore(vector<char > &ScoreStr,vector<double > &Score){
    int flag = 0;
    int sum = 0;
    vector<string >::size_type i = 0;
    while(i < ScoreStr.size()){
        if(ScoreStr[i] <= '9' && ScoreStr[i] >= '0'){
            sum = sum*10 + ScoreStr[i] - '0';
            flag = 1;
//            cout << "yes,0~9" << endl;
        }

        else{
            if(flag){
                Score.push_back(sum);
                flag = 0;
//                cout << "no,0~9" << endl;
            }
            sum = 0;
        }
        i++;
        if(i == ScoreStr.size()){
            if(flag)
                Score.push_back(sum);
        }

    }

    return 0;
}

double get_MaxScore(vector<double > &Score,int num1,int num2){
    if(num1 >= 0 && num2 >= 0){
        double Max_Score = Score[num1-1];
        if(num1 < num2){
            for(int i = num1;i < num2;i++){
                if(Score[i] > Max_Score)
                    Max_Score = Score[i];
            }
        }
        if(num1 > num2){
            for(int i = num1;i > num2;i--){
                if(Score[i] > Max_Score)
                    Max_Score = Score[i];
            }
        }
        if(num1 == num2)
            Max_Score = Score[num1-1];
        return Max_Score;
    }
    else
        return -1;
}
int LetLaterToBeBefore(vector<double > &Score,int num1,int num2){
    if(num1 < 0 || num2 < 0)
        return 1;
    Score[num1-1] = num2;
    return 0;
}

在本地编译器下AC过了,用牛客报错的输入测试在线调试也是过的,但是还是不知道哪里有问题.....可能分数输入不能这么处理...

本地是OK的

牛客网报错


开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 
处理:
1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)
3.输入的文件可能带路径,记录文件名称不能带路径

 

输入描述:

一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。

    文件路径为windows格式

    如:E:\V1R2\product\fpgadrive.c 1325

 

输出描述:

将所有的记录统计并将结果输出,格式:文件名代码行数数目,一个空格隔开,如: fpgadrive.c 1325 1 

    结果根据数目从多到少排序,数目相同的情况下,按照输入第一次出现顺序排序。

    如果超过8条记录,则只输出前8条记录.

    如果文件名的长度超过16个字符,则只输出后16个字符

 

输入例子1:

E:\V1R2\product\fpgadrive.c 1325

 

输出例子1:

fpgadrive.c 1325 1

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值