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 = gcd\{a[1] - a[0], a[2] - a[1], a[3]- a[2], ... , a[n - 1] - a[n - 2]\}
\]

此时

\[ans = 2x
\]

考虑去如何证明

不难得到

\[\forall i \in [1, n),\hspace{0.3cm} x \mid a[i] - a[i - 1]
\]

换句话说,此时所有数模\(x\)结果相同

不妨设

\[a[i] = p_ix + q
\]
  • 若\(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)的更多相关文章

  1. 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的数组, ...

  2. 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 ...

  3. 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 ...

  4. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  5. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  6. 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 ...

  7. 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 ...

  8. Codeforces Beta Round #27 (Codeforces format, Div. 2)

    Codeforces Beta Round #27 (Codeforces format, Div. 2) http://codeforces.com/contest/27 A #include< ...

  9. Educational Codeforces Round 63 (Rated for Div. 2) 题解

    Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...

  10. 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 < ...

随机推荐

  1. KingbaseES 通过触发器实现查看表的创建时间

    从oracle迁移至KingbaseES的用户,经常会问在KingbaseES中怎么查询表的创建时间. 由于KingbaseES本身并不直接存储表的创建时间,所以获取这一信息通常需要依赖于间接方法或日 ...

  2. Java对象序列化和反序列化

    Java类的序列化和反序列化 序列化:指将对象转换为字节序列的过程,也就是将对象的信息转换成文件保存. 反序列化:将字节序列转换成目标对象的过程,也就是读取文件,并转换为对象. 几个关键点: 必须实现 ...

  3. Visual Studio快捷键总览,推荐VS+Resharper实现高效开发

    VS2022之后,其实还挺好用的,但个人还是习惯VS+Resharper的强强组合,尤其是Ctrl+N快捷键的全局搜,比VS自带的Ctrl+T好用太多了,Ctrl+B还能直接查看反编译之后的dll的方 ...

  4. Git安装和配置教程:Windows/Mac/Linux三平台详细图文教程,带你一次性搞定Git环境

    Git是一款免费.开源的分布式版本控制系统,广泛应用于软件开发领域.随着开源和云计算的发展,Git已经成为了开发者必备的工具之一.本文将为大家介绍Git在Windows.Mac和Linux三个平台上的 ...

  5. Docker学习路线12:开发者体验

    到目前为止,我们只讨论了使用Docker来部署应用程序.然而,Docker也是一个极好的用于开发应用程序的工具.可以采用一些不同的建议来改善开发体验. 在应用程序中使用docker-compose以方 ...

  6. 遵循这些MySQL设计规范,再也没被组长喷过

    分享是最有效的学习方式. 博客:https://blog.ktdaddy.com/ 故事 会议室里,小猫挠着头,心里暗暗叫苦着"哎,这代码都撸完了呀,改起来成本也太大了." 原来就 ...

  7. HMS Core上新啦!

    HMS Core上新啦!分析服务营销分析报告全新上线:运动健康服务支持目标场景事件订阅:音频编辑服务提供专业的三维声音频编辑与渲染能力,更多HMS Core能力可点击网页链接了解. 了解更多详情> ...

  8. 润乾报表与 ActiveReport JS 功能对比

    简介 润乾报表是用于报表制作的大型企业级报表软件,核心特点在于开创性地提出了非线性报表数学模型,采用了革命性的多源关联分片.不规则分组.自由格间运算.行列对称等技术,使得复杂报表的设计简单化,以往难以 ...

  9. 接口文档神器apidoc

    1.apidoc介绍 1.apidoc是什么? api文档生成工具:基于源代码备注创建的接口文档: 2.apidoc优势是啥? 超简单文档生成器:几乎支持目前主流的所有风格的注释, 如可在C#.Go. ...

  10. springboot获取七牛云空间文件列表及下载功能

    原文摘自:https://www.codernav.com 第一步:新建springboot项目,引入jar包,其中hutool-all是工具类,用来写文件下载,可以随意更换. <!--工具类- ...