Loading...
1/13/2025
先に相手の隣に行ったほうが勝ちで、それは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 "; else cout << "NO "; } int main() { cin.tie(0); ios::sync_with_stdio(false); int t; cin >> t; while(t--)solve(); }
素材が足りていないものが2つ以上あれば構成不可能です1。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 "; } else if (cnt > 1) { cout << "NO "; } else { if (sum <= cmin) { cout << "YES "; } else { cout << "NO "; } } } int main() { cin.tie(0); ios::sync_with_stdio(false); int t; cin >> t; while(t--)solve(); }
制約から考えると、どんな状況においてもなにか必ず構成可能な構成の仕方が一つ(以上)存在して、それを作る以外には考えられなさそうです。 手計算で試すと、全て0に合わせるパターンが入力例のテストケース1つ目と2つ目で構成可能そう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) ? ' ' : ' '); } int main() { cin.tie(0); ios::sync_with_stdio(false); int t; cin >> t; while(t--)solve(); }