先に相手の隣に行ったほうが勝ちで、それは2人の差の偶奇を見ればよいです。
#include <bits/stdc++.h>
using namespace std;
void solve() {
int n, a, b; cin >> n >> a >> b;
if(abs(b-a)%2==0) cout << "YES\n";
else cout << "NO\n";
}
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--)solve();
}
素材が足りていないものが2つ以上あれば構成不可能です 。1つだけ足りていないものがある場合は、それ以外の素材の余剰のminが足りていない分を充足できるなら構成可能。全て足りているなら、自明に構成可能です。
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for (ll i=0;i<n;++i)
const ll inf=1ll<<60;
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
void solve() {
int n; cin >> n;
ll a[n], b[n];
rep(i, n) cin >> a[i];
rep(i, n) cin >> b[i];
int cnt = 0;
ll cmin = inf;
ll sum = 0;
rep(i, n) {
if(a[i] < b[i]) {
cnt += 1;
sum += b[i] - a[i];
} else {
chmin(cmin, a[i] - b[i]);
}
}
if (cnt == 0) {
cout << "YES\n";
} else if (cnt > 1) {
cout << "NO\n";
} else {
if (sum <= cmin) {
cout << "YES\n";
} else {
cout << "NO\n";
}
}
}
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--)solve();
}
制約から考えると、どんな状況においてもなにか必ず構成可能な構成の仕方が一つ(以上)存在して、それを作る以外には考えられなさそうです。
手計算で試すと、全て0に合わせるパターンが入力例のテストケース1つ目と2つ目で構成可能そう
なので実装をします。テストケースが合ったのでそのまま提出するとACが取れました。謎。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll=vector<ll>;
#define rep(i,n) for (ll i=0;i<n;++i)
void solve() {
int n, m;
string s;
cin >> n >> m >> s;
ll a[n][m];
ll b[n][m];
rep(i, n) rep(j, m) {
cin >> a[i][j];
b[i][j] = a[i][j];
}
vll row_sum(n, 0), col_sum(m, 0);
rep(i, n) {
rep(j, m) {
row_sum[i] += a[i][j];
col_sum[j] += a[i][j];
}
}
int pi=0, pj=0;
for (char c: s) {
if (c == 'D') {
b[pi][pj] = -row_sum[pi];
row_sum[pi] += b[pi][pj];
col_sum[pj] += b[pi][pj];
pi += 1;
} else {
b[pi][pj] = -col_sum[pj];
row_sum[pi] += b[pi][pj];
col_sum[pj] += b[pi][pj];
pj += 1;
}
}
b[n-1][m-1] = -row_sum[n-1];
assert(col_sum[m-1] + b[n-1][m-1] == 0);
rep(i, n) rep(j, m) cout << b[i][j] << ((j+1 == m) ? '\n' : ' ');
}
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--)solve();
}