Pinely Round 3 (Div. 1 + Div. 2)
A
构造题,分两种情况考虑
- 上下都行,左右选一个
- 左右都行,上下选一个
void solve() {
int n;
cin >> n;
vector<pair<int, int> > a(n);
for(auto &t : a) cin >> t.x >> t.y;
sort(a.begin(), a.end());
bool okx = a[0].x * a.back().x >= 0;
for(auto &t : a) swap(t.x, t.y);
sort(a.begin(), a.end());
bool oky = a[0].x * a.back().x >= 0;
cout << (okx | oky ? "YES\n" : "NO\n");
}
B
也是构造,这里介绍两种方法
法一 : 二进制拆分
考虑只去模 \(2^k\)
把每个数二进制拆分,模 \(2^k\) 的结果即为这个数的 $[0, k - 1] $位
一直往上枚举 \(k\),直到所有数的 $[0, k - 2] $位相同,第 \(k - 1\) 位不同
void solve() {
int n;
cin>> n;
vector<ll> a(n);
for(ll &x : a) cin >> x;
auto check = [&](ll p) -> bool {
set<ll> se;
for(int i = 0; i < n; ++ i) se.insert(a[i] % p);
return se.size() == 2;
};
for(int i = 1; ; ++ i) {
if(check(1ll << i)) {
cout << (1ll << i) <<'\n';
return;
}
}
}
法二 : 数学
令
\]
此时
\]
考虑去如何证明
不难得到
\]
换句话说,此时所有数模\(x\)结果相同
不妨设
\]
- 若\(p_i\)为偶数,则\(a[i] \bmod 2x = q\)
- 若\(p_i\)为奇数,则\(a[i] \bmod 2x = x + q\)
由于 \(q < x\),所以 \(x + q < 2x\)
又\(x \neq 0\),所以 \(q \neq x + q\)
情况一: \(p\) 中既有奇数又有偶数,显然成立
情况二: \(p\) 全为奇数或全为偶数,则此时 \(gcd\{a[i] - a[i - 1]\}\) 一定是 \(2x\)的倍数, 与最大为 \(x\) 矛盾
void solve() {
int n;
cin >> n;
ll ans = 0;
vector<ll> a(n);
for(int i = 0; i < n; ++ i) {
cin >> a[i];
if(i) ans = gcd(ans, abs(a[i] - a[i - 1]));
}
cout << ans * 2 << '\n';
}
D. Split Plus K
void solve() {
ll n, k;
cin >> n >> k;
vector<ll> a(n);
for(auto &x : a) cin >> x;
sort(a.begin(), a.end());
if(a[0] == a[n - 1]) cout << "0\n";
else if(a[0] <= k && a[n - 1] >= k) cout << "-1\n";
else {
ll t = 0, ans = 0;
for(auto x : a) t = __gcd(t, x - k);
for(auto x : a) ans += (x - k) / t - 1;
cout << ans << '\n';
}
}
E. Multiple Lamps
vector<int> ans[20];
void init() {
for(int n = 1; n < 20; ++ n) {
vector<int> f(n + 1, 0);
for(int i = 1; i <= n; ++ i) {
for(int j = i; j <= n; j += i) f[i] |= 1 << j;
}
for(int i = 1; i < 1 << n; ++ i) {
int t = 0;
for(int j = 1; j <= n; ++ j) if((i << 1) >> j & 1) t ^= f[j];
if(__builtin_popcount(t) <= n / 5) ans[n].push_back(i << 1);
}
}
}
void solve() {
int n, m;
cin >> n >> m;
vector<pair<int, int> > a(m);
for(auto &[x, y] : a) cin >> x >> y;
if(n >= 20) {
cout << n << '\n';
for(int i = 1; i <= n; ++ i) cout << i << ' ';
cout << '\n';
}
else {
for(auto sta : ans[n]) {
bool ok = 1;
for(auto &[x, y] : a) if((sta >> x & 1) && !(sta >> y & 1)) ok = 0;
if(ok) {
cout << __builtin_popcount(sta) << '\n';
for(int i = 1; i <= n; ++ i) if(sta >> i & 1) cout << i << ' ';
cout << '\n';
return;
}
}
cout << "-1\n";
}
}
F1. Small Permutation Problem (Easy Version)
void solve() {
int n, ok = 1;
cin >> n;
vector<int> a(n + 1, 0);
for(int i = 1; i <= n; ++ i) {
cin >> a[i];
ok &= a[i] <= i && a[i] >= a[i - 1] && a[i] <= a[i - 1] + 2;
}
if(!ok || a[n] != n) cout << "0\n";
else {
ll ans = 1;
for(int i = 1; i <= n; ++ i) {
int delta = a[i] - a[i - 1];
if(delta == 1) ans = ans * (2 * (i - a[i - 1]) - 1) % P;
if(delta == 2) ans = ans * (i - a[i - 1] - 1) % P * (i - a[i - 1] - 1) % P;
}
cout << ans << '\n';
}
}
F2. Small Permutation Problem (Hard Version)
ll calc(int a, int b, int k) {
return C(a, k) * C(b, k) % P * fac[k] % P;
}
void solve() {
int n;
cin >> n;
vector<int> a(n + 1, 0);
for(int i = 1; i <= n; ++ i) cin >> a[i];
if(a[n] != n && a[n] != -1) return cout << "0\n", void();
ll ans = 1;
auto work = [&](int i, int j) {
ll cur = 0;
int delta = a[i] - a[j];
for(int k = 0; k <= delta; ++ k) {
cur = (cur + calc(i - j, i - a[j] - k, delta - k) * calc( i - j, j - a[j], k)) % P;
}
ans = ans * cur % P;
};
int i = 1, j = 0;
for(; i <= n; ++ i) {
if(~ a[i]) {
if(a[i] < a[j]) return cout << "0\n", void();
work(i, j);
j = i;
}
}
work(a[n] = n, j);
cout << ans << '\n';
}
Pinely Round 3 (Div. 1 + Div. 2)的更多相关文章
- CF Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)
1. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort 暴力枚举,水 1.题意:n*m的数组, ...
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- Educational Codeforces Round 43 (Rated for Div. 2)
Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...
- Educational Codeforces Round 35 (Rated for Div. 2)
Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...
- Codeforces Beta Round #27 (Codeforces format, Div. 2)
Codeforces Beta Round #27 (Codeforces format, Div. 2) http://codeforces.com/contest/27 A #include< ...
- Educational Codeforces Round 63 (Rated for Div. 2) 题解
Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...
- Educational Codeforces Round 39 (Rated for Div. 2) G
Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...
随机推荐
- Lambda表达式编写递归函数
class Program { //Fix求出的是函数f的不动点,它就是我们所需要的递归函数: static Func<T, TResult> Fix<T, TResult>( ...
- linux xfce 在文件管理器里点击运行shell脚本文件
1.打开 Settings Editor 2.点击左边的 thunar 3.点击右边的 添加 ,在属性中输入 /misc-exec-shell-scripts-by-default 在类型中选择布尔类 ...
- 战“码”先锋直播预告丨如何成为一名优秀的OpenHamrony贡献者?
OpenAtom OpenHarmony(以下简称"OpenHarmony")工作委员会首度发起「OpenHarmony开源贡献者计划」,旨在鼓励开发者参与OpenHarmony开 ...
- Go 语言中 For 循环:语法、使用方法和实例教程
for循环用于多次执行特定的代码块,每次都可以使用不同的值.每次循环执行都称为一次迭代.for循环可以包含最多三个语句: 语法 for 语句1; 语句2; 语句3 { // 每次迭代要执行的代码 } ...
- mysql迁移sqlServer和mybatisPlus下查询语句转换为SqlServer2008
mysql数据迁移sqlServer2008 mybatisPlus下查询语句转换 一.mysql数据迁移到sqlServer2008中(包括数据结构和数据) 最近公司项目需要使用sqlServer以 ...
- MogDB/openGauss中merge的语法解析
MogDB/openGauss 中 merge 的语法解析 近期了解学习了 MogDB/openGauss 中 merge 的使用,merge 语法是根据源表对目标表进行匹配查询,匹配成功时更新,不成 ...
- Python语言Numpy包之Meshgrid 函数
Meshgrid 函数的基本用法 在 Numpy 的官方文章里, meshgrid 函数的英文描述也显得文绉绉的,理解起来有些难度.可以这么理解, meshgrid 函数用两个坐标轴上的点在平面上画网 ...
- iOS系统崩溃的捕获
iOS系统崩溃的捕获 相信大家在开发iOS程序的时候肯定写过各种Bug,而其中最为严重的Bug就是会导致崩溃的Bug(一般来说妥妥的P1级).在应用软件大大小小的各种异常中,崩溃确实是最让人难以接受的 ...
- c# countDownEvent类
前言 把异步先总结完吧. countDownEvent 这东西是干什么的呢? 比如说我们比赛跑步,我们需要得出的是第一二三名得出后就可以先统计出来,因为比较重要,后面没有获得获奖名次的可以后续统计出来 ...
- Oracle邮件发送(内容中带有收件人独有信息)
Oracle邮件发送(内容中带有收件人独有信息) Oracle邮件发送(内容中带有收件人独有信息) Oracle发送邮件最简单的应该就是用smtp,具体使用和参数讲解我这儿没有 简单来说,发送邮件的思 ...