#include <bits/stdc++.h> using namespace std; #define int long long int judge(int l, int r) { if (l % 2 == 1 && r % 2 == 1) { int n = r - l + 1; //之间数字个数 int ans = r + (n / 2) * (-1); return ans; } if (l % 2 == 1 && r % 2 == 0) { int n = r - l + 1; int ans = (n / 2) * (-1); return ans; } if (l % 2 == 0 && r % 2 == 1) { int n = r - l + 1; int ans = (n / 2); return ans; } if (l % 2 == 0 && r % 2 == 0) { int n = r - l + 1; int ans = 1 * (n / 2) - r; return ans; } return 0; } signed main() { int t; cin >> t; while (t--) { int l, r; cin >> l >> r; cout << judge(l, r) << endl; } return 0; }
动用神奇的大脑和灵巧的手,就会发现奇偶之间相加只会出现两种结果,1或者-1,与此同时穷举四种可能出现的情况, 就会发现当【l % 2 == 0 && r % 2 == 0】时和当【l % 2 == 1 && r % 2 == 1】时,末尾往往会多出一个数字,基于这个想法,我们就可以暴力解出来答案啦。(前缀和的话会超出栈空间,只能通过部分样例)