Codeforces Round #641 (Div. 2)
还是视频题解。
被卡D了,难受,D其实就逐个情况分析一下就能推出来了,但比赛的时候感觉没有一个明确的方向,导致思路很混乱。
为啥E过的人这么少?E感觉比D还简单,直接多源点BFS一下就行。
代码如下:
A. Orac and Factors
/*
* Author: heyuhhh
* Created Time: 2020/5/12 20:36:40
*/
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <iomanip>
#include <assert.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
#define Local
#ifdef Local
#define dbg(args...) do { cout << #args << " -> "; err(args); } while (0)
void err() { std::cout << std::endl; }
template<typename T, typename...Args>
void err(T a, Args...args) { std::cout << a << ' '; err(args...); }
template <template<typename...> class T, typename t, typename... A>
void err(const T <t> &arg, const A&... args) {
for (auto &v : arg) std::cout << v << ' '; err(args...); }
#else
#define dbg(...)
#endif
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
//head
const int N = 1e5 + 5;
void run() {
int n, k; cin >> n >> k;
int t;
for (int i = 2; i <= n; i++) {
if (n % i == 0) {
t = i; break;
}
}
--k; n += t;
n += 2 * k;
cout << n << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
int T; cin >> T; while(T--)
run();
return 0;
}
B. Orac and Models
/*
* Author: heyuhhh
* Created Time: 2020/5/12 20:44:31
*/
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <iomanip>
#include <assert.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
#define Local
#ifdef Local
#define dbg(args...) do { cout << #args << " -> "; err(args); } while (0)
void err() { std::cout << std::endl; }
template<typename T, typename...Args>
void err(T a, Args...args) { std::cout << a << ' '; err(args...); }
template <template<typename...> class T, typename t, typename... A>
void err(const T <t> &arg, const A&... args) {
for (auto &v : arg) std::cout << v << ' '; err(args...); }
#else
#define dbg(...)
#endif
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
//head
const int N = 1e5 + 5;
int n;
int a[N];
vector <int> d[N];
void init() {
for (int i = 1; i < N; i++) {
for (int j = i + i; j < N; j += i) {
d[j].emplace_back(i);
}
}
}
void run() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
vector <int> f(n + 1, 1);
for (int i = 2; i <= n; i++) {
for (auto it : d[i]) {
if (a[it] < a[i]) f[i] = max(f[i], f[it] + 1);
}
}
int ans = 0;
for (int i = 1; i <= n; i++) ans = max(ans, f[i]);
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
init();
int T; cin >> T; while (T--)
run();
return 0;
}
C. Orac and LCM
/*
* Author: heyuhhh
* Created Time: 2020/5/12 20:51:42
*/
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <iomanip>
#include <assert.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
#define Local
#ifdef Local
#define dbg(args...) do { cout << #args << " -> "; err(args); } while (0)
void err() { std::cout << std::endl; }
template<typename T, typename...Args>
void err(T a, Args...args) { std::cout << a << ' '; err(args...); }
template <template<typename...> class T, typename t, typename... A>
void err(const T <t> &arg, const A&... args) {
for (auto &v : arg) std::cout << v << ' '; err(args...); }
#else
#define dbg(...)
#endif
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
//head
const int N = 1e5 + 5, M = 2e5 + 5;
int n;
int a[N];
vector <int> v[M];
ll qpow(ll a, ll b) {
ll res = 1;
while (b) {
if (b & 1) res = res * a;
a = a * a;
b >>= 1;
}
return res;
}
void run() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
int x = a[i];
for (int j = 2; 1ll * j * j <= x; j++) {
if (x % j == 0) {
int cnt = 0;
while (x % j == 0) {
x /= j;
++cnt;
}
v[j].push_back(cnt);
}
}
if (x > 1) {
v[x].push_back(1);
}
}
for (int i = 1; i < M; i++) {
sort(all(v[i]));
}
ll ans = 1;
for (int i = 1; i < M; i++) {
if (sz(v[i]) <= n - 2) continue;
if (sz(v[i]) == n - 1) {
ans *= qpow(i, v[i][0]);
} else {
ans *= qpow(i, v[i][1]);
}
}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
run();
return 0;
}
D. Orac and Medians
/*
* Author: heyuhhh
* Created Time: 2020/5/12 21:36:28
*/
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <iomanip>
#include <assert.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
#define Local
#ifdef Local
#define dbg(args...) do { cout << #args << " -> "; err(args); } while (0)
void err() { std::cout << std::endl; }
template<typename T, typename...Args>
void err(T a, Args...args) { std::cout << a << ' '; err(args...); }
template <template<typename...> class T, typename t, typename... A>
void err(const T <t> &arg, const A&... args) {
for (auto &v : arg) std::cout << v << ' '; err(args...); }
#else
#define dbg(...)
#endif
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
//head
const int N = 1e5 + 5;
int n;
int a[N];
void run() {
int n, k; cin >> n >> k;
int cnt = 0;
for (int i = 1; i <= n; i++) {
int x; cin >> x;
if (x > k) a[i] = 1;
else if (x < k) a[i] = -1;
else a[i] = 0;
if (a[i] == 0) ++cnt;
}
auto chk = [&] () {
if (cnt == n) return true;
if (cnt == 0) return false;
for (int i = 1; i < n; i++) {
if (a[i] >= 0 && a[i + 1] >= 0) return true;
}
for (int i = 1; i < n - 1; i++) {
if (a[i] >= 0 && a[i + 2] >= 0) return true;
}
return false;
};
if (chk()) cout << "yes" << '\n';
else cout << "no" << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
int T; cin >> T; while(T--)
run();
return 0;
}
E. Orac and Game of Life
/*
* Author: heyuhhh
* Created Time: 2020/5/12 23:56:30
*/
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <iomanip>
#include <assert.h>
#define MP make_pair
#define fi first
#define se second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
#define Local
#ifdef Local
#define dbg(args...) do { cout << #args << " -> "; err(args); } while (0)
void err() { std::cout << std::endl; }
template<typename T, typename...Args>
void err(T a, Args...args) { std::cout << a << ' '; err(args...); }
template <template<typename...> class T, typename t, typename... A>
void err(const T <t> &arg, const A&... args) {
for (auto &v : arg) std::cout << v << ' '; err(args...); }
#else
#define dbg(...)
#endif
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
//head
const int N = 1e3 + 5;
const int dx[] = {-1, 1, 0, 0}, dy[] = {0, 0, -1, 1};
int n, m, t;
char s[N][N];
int a[N][N], dis[N][N];
bool vis[N][N];
void run() {
cin >> n >> m >> t;
for (int i = 1; i <= n; i++) {
cin >> (s[i] + 1);
for (int j = 1; j <= m; j++) {
a[i][j] = (s[i][j] - '0');
}
}
auto ok = [&] (int nx, int ny) {
return nx >= 1 && nx <= n && ny >= 1 && ny <= m;
};
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (!vis[i][j]) {
for (int k = 0; k < 4; k++) {
int x = i + dx[k], y = j + dy[k];
if (ok(x, y) && a[x][y] == a[i][j]) {
vis[i][j] = true;
}
}
}
}
}
memset(dis, INF, sizeof(dis));
queue <pii> q;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (vis[i][j]) {
q.push(MP(i, j));
dis[i][j] = 0;
}
}
}
while (!q.empty()) {
pii cur = q.front(); q.pop();
int x = cur.fi, y = cur.se;
auto ok = [&] (int nx, int ny) {
return nx >= 1 && nx <= n && ny >= 1 && ny <= m && !vis[nx][ny] && dis[nx][ny] > dis[x][y] + 1;
};
for (int k = 0; k < 4; k++) {
int nx = x + dx[k], ny = y + dy[k];
if (ok(nx, ny)) {
dis[nx][ny] = dis[x][y] + 1;
vis[nx][ny] = true;
q.push(MP(nx, ny));
}
}
}
while (t--) {
int i, j; ll p;
cin >> i >> j >> p;
if (p <= dis[i][j] || dis[i][j] == INF) {
cout << a[i][j] << '\n';
} else {
int r = (p - dis[i][j]) % 2;
cout << (a[i][j] ^ r) << '\n';
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
run();
return 0;
}
重要的是自信,一旦有了自信,人就会赢得一切。