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 < ...
随机推荐
- 降低FTP服务器速度的解决方案(Filezilla等)
我最近发现,尽管有70Mbps(8.75MB / s)的互联网连接和1Gbps(125MB / s)的专用服务器可以从中下载,但我似乎只能从FTP服务器上以大约16.8Mbps(2.1MB / s)的 ...
- 【Java】try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后? package com.test ...
- Web服务器启用HTTPS的配置方法
本文于2016年3月完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. nginx的配置方法 可以参考Jerry Qu的本博客 Nginx 配 ...
- 本周四晚19:00知识赋能第六期第5课丨OpenHarmony WiFi子系统
OpenAtom OpenHarmony(以下简称"OpenHarmony")开源开发者成长计划项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注. 成长计划 ...
- Go 语言中的 Switch 语句详解
switch语句 使用switch语句来选择要执行的多个代码块中的一个. 在Go中的switch语句类似于C.C++.Java.JavaScript和PHP中的switch语句.不同之处在于它只执行匹 ...
- Redis 19 SpringBoot集成
概述 SpringBoot 整合 Redis 是使用 SpringData 实现的. SpringData 是与 SpringBoot 齐名的顶级项目,整合了对常用数据库的模板型操作. 在 Sprin ...
- “最新趋势:R语言lavaan结构方程模型(SEM)的实践应用与技巧”
结构方程模型(Sructural Equation Modeling,SEM)是分析系统内变量间的相互关系的利器,可通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和广泛的适用性, ...
- openGauss/MogDB调用C FUNCTION
openGauss/MogDB 调用 C FUNCTION 摘要 之前写过一篇关于postgresql 自定义函数实现,通过 contrib 模块进行扩展的帖子,今天和恩墨工程师进行了一些交流,在 M ...
- js 如何实现管道或者说组合
前言 概念:管道是从左往右函数执行,组合是从右往左执行. 实现 原理与作用后续补齐. function compose(...funcs) { return function(x) { funcs.r ...
- cv2在图像上画不同比例的锚框
''' cv2在图像上画不同比例的锚框 ''' import cv2 import math # 画宽高比1:1的锚框 def display_11_anchor(img,anchor_11_left ...