题目链接:蓝桥杯2023年第十四届省赛真题-平方差 - C语言网 (dotcpp.com)
题目不难,但是要通过全部测试点比较难,多次优化后才得以拿到全部分值
①第一次仅考虑到了x的分子的奇偶性质
②第二次进行优化考虑到奇数*奇数得到的一定是奇数,奇数一定有两个奇数因子,偶数*偶数得到的一定是偶数,但是一定要满足是4的倍数,但这样还是要进行一重循环进行遍历
③优化直接求出满足条件的x个数
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
//因子全为奇数或者因子全为偶数
//奇数*奇数得到奇数,偶数乘偶数一定是4的倍数
//有一个样例会超时,寻找规律一步求解,那么转而向如何直接求出L,R
//区间内4的倍数的个数和奇数的个数
int f(int x) {
return x / 4 + (x + 1) / 2;
}
int main() {
int l, r;
cin >> l >> r;
cout << f(r)-f(l-1); //边界条件要注意
return 0;
}