T1. 反轉(zhuǎn)
枚舉反轉(zhuǎn)了多少行和列(因?yàn)樾泻托兄g本身沒有區(qū)別,列同理),算一下是否有 \(k\) 個(gè)格子被反轉(zhuǎn)。
代碼實(shí)現(xiàn)
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
void solve() {
int n, m, k;
cin >> n >> m >> k;
rep(i, n+1) {
rep(j, m+1) {
if (i*j + (n-i)*(m-j) == k) {
puts("Yes");
return;
}
}
}
puts("No");
}
int main() {
int t;
cin >> t;
while (t--) solve();
return 0;
}
T2. 函數(shù)
請(qǐng)注意,該序列是循環(huán)的,意味著序列的形式如下:
\[[a, b, a \oplus b, a, b, a \oplus b, \cdots]
\]
我們幾乎可以通過確定循環(huán)節(jié)來完成整個(gè)任務(wù)。循環(huán)節(jié)個(gè)數(shù)是 \(3\) 個(gè)整數(shù)組成的段數(shù)。區(qū)間長(zhǎng)度是 \(r-l+1\),因此循環(huán)節(jié)個(gè)數(shù)為 \(\lfloor\frac{r-l+1}{3}\rfloor\) 。
我們通過注意到循環(huán)從區(qū)間第一個(gè) \(a\) 開始,最后一個(gè) \(a \oplus b\) 結(jié)束,來獲取循環(huán)開始和結(jié)束下標(biāo)。除此之外,我們?cè)賮砬笫S嗟脑兀ㄗ疃?\(2\) 個(gè))的和,循環(huán)部分的和為:
\[\lfloor\frac{r-l+1}{3}\rfloor \times (a + b + a \oplus b)
\]
總復(fù)雜度為 \(O(n)\)
代碼實(shí)現(xiàn)
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
using ll = long long;
void solve() {
int a, b, l, r;
cin >> a >> b >> l >> r;
--l; --r;
vector<int> x(3);
x[0] = a;
x[1] = b;
x[2] = a^b;
ll sum = 0;
rep(i, 3) sum += x[i];
int n = r-l+1;
int si = l%3;
ll ans = n/3*sum;
n %= 3;
rep(i, n) ans += x[(si+i)%3];
cout << ans << '\n';
}
int main() {
int t;
cin >> t;
while (t--) solve();
return 0;
}
浙公網(wǎng)安備 33010602011771號(hào)