给定一段连续的整数,求出它们中所有偶数的平方和以及所有奇数的立方和。

输入格式

输入包含多组测试数据。

每组数据占一行,包含两个整数 nm,表示连续整数为 min(n,m)∼max(n,m)

输出格式

每组数据输出一行结果,包括两个整数 xy,(两个数之间用一个空格隔开)分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。

数据范围

  • 1 ≤ n, m ≤ 1000, n ≠ m
  • 答案保证不超过 2^31 - 1。
  • 输入最多包含 100 组数据。

输入样例

1 3
2 5

输出样例

4 28
20 152

题目分析

打表, 前缀和

代码实现

#include <iostream>
using namespace std;
const int N = 1e3 + 10;

int a, b, arr[N];
void solve(int n, int m) {
    if (n & 1) {
        if (m & 1) cout << arr[m - 1] - arr[n - 1 >= 0 ? n - 1 : 0] << ' ' << arr[m] - arr[n - 2 >= 0 ? n - 2 : 0] << '\n';
        else cout << arr[m] - arr[n - 1] << ' ' << arr[m - 1] - arr[n - 2 >= 0 ? n - 2 : 0] << '\n';
    }
    else {
        if (m & 1) cout << arr[m - 1] - arr[n - 2 >= 0 ? n - 2 : 0] << ' ' << arr[m] - arr[n - 1 >= 0 ? n - 1 : 0] << '\n';
        else cout << arr[m] - arr[n - 2 >= 0 ? n - 2 : 0] << ' ' << arr[m - 1] - arr[n - 1 >= 0 ? n - 1 : 0] << '\n';
    }
}
void eval() {
    arr[1] = 1, arr[2] = 4;
    for (int i = 3; i <= 1e3; ++i) {
        if (i & 1) arr[i] = i * i * i + arr[i - 2];
        else arr[i] = i * i + arr[i - 2];
    }
}
int main () {
    ios::sync_with_stdio(0);
    cin.tie(0);
    eval();
    while(cin >> a >> b) solve(min(a,b),max(a,b));
    return 0;
} 
最后修改:2023 年 09 月 23 日
如果觉得我的文章对你有用,请随意赞赏