Codeforces Round #663 (Div. 2)
阿新 • • 發佈:2020-08-10
實力眼瞎, D n == 1 ans = 0, 我輸出-1 分又沒了
A
#include <bits/stdc++.h> #define all(n) (n).begin(), (n).end() #define se second #define fi first #define pb push_back #define mp make_pair #define sqr(n) (n)*(n) #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define per(i,a,b) for(int i=(a);i>=(b);--i) #define IO ios::sync_with_stdio(0); cin.tie(0) using namespace std; typedef long long ll; typedef pair<int, int> PII; typedef pair<ll, ll> PLL; typedef vector<int> VI; typedef double db; const int N = 1e5 + 5; int n, m, _, k; int main() { IO; for (cin >> _; _; --_) { cin >> n; rep (i, 1, n) cout << i << ' '; cout << '\n'; } return 0; }
B
#include <bits/stdc++.h> #define all(n) (n).begin(), (n).end() #define se second #define fi first #define pb push_back #define mp make_pair #define sqr(n) (n)*(n) #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define per(i,a,b) for(int i=(a);i>=(b);--i) #define IO ios::sync_with_stdio(0); cin.tie(0) using namespace std; typedef long long ll; typedef pair<int, int> PII; typedef pair<ll, ll> PLL; typedef vector<int> VI; typedef double db; const int N = 1e5 + 5; int n, m, _, k; int f[105][105]; char s[105][105]; int main() { IO; for (cin >> _; _; --_) { cin >> n >> m; int ans = 0; rep (i, 1, n) { cin >> s[i] + 1; if (s[i][m] == 'R') ++ans; } rep (i, 1, m) if (s[n][i] == 'D') ++ans; cout << ans << '\n'; } return 0; }
C
不讓你有回去得邊, 即邊數為 n - 1
對於 數字n 左右兩邊, 分別為升序和降序, 則邊數必為 n - 1
#include <bits/stdc++.h> #define all(n) (n).begin(), (n).end() #define se second #define fi first #define pb push_back #define mp make_pair #define sqr(n) (n)*(n) #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define per(i,a,b) for(int i=(a);i>=(b);--i) #define IO ios::sync_with_stdio(0); cin.tie(0) using namespace std; typedef long long ll; typedef pair<int, int> PII; typedef pair<ll, ll> PLL; typedef vector<int> VI; typedef double db; const int N = 1e6 + 5, mod = 1e9 +7; int n, m, _, k; int inv[N] = {0, 1}, a[N] = {1, 1}, b[N] = {1, 1}; int C(int x, int y) { if (y == 0 || x == mod) return 1; if (x < 0 || y < 0 || y > x) return 0; return (ll)a[x] * b[y] % mod * b[x - y] % mod; } void init() { rep (i, 2, n) { inv[i] = (ll)(mod - mod / i) * inv[mod % i] % mod; a[i] = (ll)a[i - 1] * i % mod; b[i] = (ll)b[i - 1] * inv[i] % mod; } } int main() { IO; cin >> n; init(); ll ans = 0; rep (i, 1, n) { ans = (ans + C(n - 1, i - 1)) % mod; } ans = (a[n] - ans + mod) % mod; cout << ans; return 0; }
D
dp
#include <bits/stdc++.h>
#define all(n) (n).begin(), (n).end()
#define se second
#define fi first
#define pb push_back
#define mp make_pair
#define sqr(n) (n)*(n)
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
#define IO ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<ll, ll> PLL;
typedef vector<int> VI;
typedef double db;
const int N = 1e6 + 5;
int n, m, _, k;
char s[N];
int f[N][8], v[N];
bool check(int a, int b) {
if (n == 2) return (__builtin_popcount(a) + __builtin_popcount(b)) % 2;
return (__builtin_popcount(a & 3) + __builtin_popcount(b & 3)) % 2
&& (__builtin_popcount(a >> 1) + __builtin_popcount(b >> 1)) % 2;
}
int main() {
IO;
cin >> n >> m;
if (n >= 4 && m >= 4) { cout << -1; return 0; };
if (n == 1 || m == 1) { cout << 0; return 0; }
memset(f, 0x3f, sizeof f);
rep (i, 0, n - 1) {
cin >> s;
rep (j, 0, m - 1)
if (s[j] == '1') v[j] |= 1 << i;
}
rep (i, 0, m - 1)
rep (j, 0, (1 << n) - 1) {
if (i == 0) f[i][j] = 0;
else rep (k, 0, (1 << n) - 1) if (check(k, j)) f[i][j] = min(f[i - 1][k], f[i][j]);
f[i][j] += __builtin_popcount(j ^ v[i]);
//cout << i << ' ' << j << ' ' << f[i][j] << '\n';
}
cout << *min_element(f[m - 1], f[m - 1] + 8);
return 0;
}