Skip to content

11243: 【原1243】我有特别的微调技巧

题目

题目描述

author: Ted Yin 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/1243

Description

又到了期末评分的时候了。X老师总是为打分这件事感到发愁,这是因为如果同学们分数都偏高或者偏低,领导就会请自己喝茶。

因此为了确保分数呈现正态分布,X老师决定对分数进行微调。假设班上的分数按照学号排成一个数列,X老师拥有特别的微调技巧。作为他忠实助教的你,需要编写一个微调系统。 需要实现的操作如下:

0 l r -- 将学号l到r之间(包含两端,下同)所有同学的成绩的算术平均输出;

1 l r -- 将l到r之间所有同学的最高分输出;

2 l r -- 将l到r之间所有同学的成绩翻转,即l同学成绩变为r同学成绩,l+1同学的变为r-1的,以此类推;

3 l r -- 依次输出l到r之间所有同学的成绩,用空格分开;

4 l r -- 将l到r之间所有同学的成绩下调1,若已经是0分则不变。

Input Format

第一行是两个整数n, m,分别是班上人数和操作次数。

第二行有n个非负整数,依次是0号同学到n-1号同学的初始成绩。

从第三行开始,每行有三个整数 opt l r,表示操作类型以及对应的区间。

0 < n <= 1000

0 < m <= 2000

0 <= l <= r < n

0 <= opt < 5

Output Format

对于每个带有输出的操作,输出相应的值(平均值保留两位小数)。

Sample Input

10 6
0 1 2 3 4 5 6 7 8 9
0 0 9
2 0 4
1 2 5
4 0 9
2 0 9
3 0 9

Sample Output

4.50
5
8 7 6 5 4 0 0 1 2 3

ligongzzz's solution

#include "iostream"
#include "cstdio"
using namespace std;

int val_data[1009] = { 0 };

int main() {
    int n, m;
    scanf("%d %d", &n, &m);

    for (int i = 0; i < n; ++i) {
        scanf("%d", &val_data[i]);
    }

    for (; m > 0; --m) {
        int opt, l, r;
        scanf("%d %d %d", &opt, &l, &r);

        if (opt == 0) {
            double ans = 0.0;
            for (int i = l; i <= r; ++i)
                ans += double(val_data[i]);
            printf("%.2f\n", ans / (r - l + 1));
        }
        else if (opt == 1) {
            int cur_max = 0;
            for (int i = l; i <= r; ++i) {
                cur_max = val_data[i] > cur_max ? val_data[i] : cur_max;
            }
            printf("%d\n", cur_max);
        }
        else if (opt == 2) {
            for (; l < r; ++l, --r) {
                swap(val_data[l], val_data[r]);
            }
        }
        else if (opt == 3) {
            printf("%d", val_data[l]);
            for (int i = l + 1; i <= r; ++i)
                printf(" %d", val_data[i]);
            printf("\n");
        }
        else if (opt == 4) {
            for (int i = l; i <= r; ++i) {
                if (val_data[i] > 0)
                    --val_data[i];
            }
        }
    }

    return 0;
}